冒泡排序

Posted on 2017-08-30 20:38  TurtleDove  阅读(107)  评论(0)    收藏  举报

       冒泡排序:冒泡排序是一种简单的排序,它是将相邻的两个数依次比较,将小数放在前面,大数放在后面。然后重复地走访过要排序的数列,直至没有需要交换的数为止,即排序完成。"冒泡"这个词也就是因为越小的元素会经由交换慢慢“浮”到数列的顶端,像气泡一样慢慢冒出来一样。

冒泡排序的示范如下:

  图1.第一个数与相邻数比较大小交换位置

  图2.交换位置后与相邻的数再次比较大小后交换位置

  图3.第一趟排序完成

  图4.排序完成

交换相邻的两个数           再次交换相邻的两个数

      第一趟交换完成      排序完成

 

冒泡排序的Java算法如下:(数组从小到大排列)

 1 /**
 2  * 冒泡排序
 3  * @author turtle
 4  * 工作思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。
 5  * 即在第一趟时,首先比较第1个和第2个数,将小数放前,大数放后。
 6  * 然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后,完成排序。
 7  */
 8 public class bubble {
 9     public static void bubbleSort(int[] numbers) {
10         int size = numbers.length;
11         for (int i = 0; i < size - 1; i++) { //冒泡趟数n-1次
12             for (int j = 0; j < size - 1 - i; j++) {
13                 if (numbers[j] > numbers[j + 1]) {
14                     int temp = numbers[j];
15                     numbers[j] = numbers[j + 1];
16                     numbers[j + 1] = temp;
17                 }
18             }
19         }
20     }
21 }

 

冒泡排序是一种用时间换空间的排序算法,最坏的情况是把顺序的排序变成逆序(O(n²)),或者把逆序的排序变成顺序(O(n)),每一次比较都需要进行交换运算。

运行测试:

1 public class run {
2     public static void main(String[] args) {
3         int[] bubble_num = { 46, 37, 34, 33, 28, 16, 14, 5, 5, 1 };
4         bubble.bubbleSort(bubble_num);
5         System.out.println(Arrays.toString(bubble_num));
6     }
7 }

测试结果:

[1, 5, 5, 14, 16, 28, 33, 34, 37, 46]