Java经典排序算法-冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端(从大到小排序则相反)。

思路:依次比较相邻的两个数的大小,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。
设待排序的数组长度为N,则需进行N-1趟排序,每趟排序则需进行N-1-i(0≤i<N-1)次比较
简记:外层循环N-1,内层循环N-1-i

算法稳定性:冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

时间复杂度:O(n^2)

优点:稳定;
缺点:慢,每次只能移动相邻两个数据。

  1. /**
  2. * @param args
  3. */
  4. public static void main(String[] args) {
  5. // TODO Auto-generated method stub
  6. int[] array = {5,20,16,8,6,3,0,9,1};
  7. System.out.println("排序前:"+Arrays.toString(array));
  8. bubbleSort(array);
  9. System.out.println("排序后:"+Arrays.toString(array));
  10. }
  11. /**
  12. * 冒泡排序
  13. * @param array
  14. */
  15. public static void bubbleSort(int[] array){
  16. //临时变量
  17. int temp = 0;
  18. //外层循环N-1
  19. for (int i = 0; i < array.length - 1; i++) {
  20. //内层循环N-1-i
  21. for (int j = 0; j < array.length - 1 - i; j++) {
  22. //判断最大值
  23. if(array[j] > array[j+1]){
  24. //临时储存最大值
  25. temp = array[j];
  26. //交换位置
  27. array[j] = array[j+1];
  28. array[j+1] = temp;
  29. }
  30. }
  31. }
  32. }

输出结果:

  1. 排序前:[5, 20, 16, 8, 6, 3, 0, 9, 1]
  2. 排序后:[0, 1, 3, 5, 6, 8, 9, 16, 20]

此条目是由 毅哥哥 发表在 记录 分类目录的 ,并贴了   标签

转载请注明作者和出处(小毅博客),并添加本页链接
原文链接: http://owexz.net/post/23

Java经典排序算法-冒泡排序》上有 0 条评论


必填项已用*标注