交换排序

交换排序的基本思想:两两比较待排序关键字,一旦发现两个记录不满足次序要求则进行交换,知道整个队列全部满足要求为止

冒泡排序

冒泡排序是一种最简单的交换排序,他通过两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记录如气泡一般逐渐往上“漂浮”,或者往下沉。

 1 public class BubbleSort {
 2     
 3     public static void main(String [] args) {
 4         int[] array = new int[]{2, 6, 3, 8, 9, 0, 1, 7, 4};
 5         BubbleSort(array);
 6     }
 7     
 8     public static void BubbleSort(int[] array) {
 9         printArray(array);
10         for(int i = 0; i < array.length; i++) {
11             boolean flag = true;    // 标记本次循环没有数据交换
12             for(int j = 0; j < array.length - i - 1; j++) {
13                 if(array[j] > array[j+1]) {
14                     int tmp = array[j];
15                     array[j] = array[j+1];
16                     array[j+1] = tmp;
17                     flag = false;   // 发生了数据交换
18                 }
19             }
20             printArray(array);
21             if(flag) {
22                 // 如果本次循环没有发生任何数据交换
23                 break;
24             }
25         }
26     }
27     
28     public static void printArray(int[] array) {
29         for(int i : array) {
30             System.out.printf("%d	", i);
31         }
32         System.out.println();
33     }
34 }

时间复杂度:O(n2)

空间复杂度:O(1)

算法特点:

  1. 稳定排序
  2. 可用于链式存储结构
  3. 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,记录数较大时,不宜采用。
原文地址:https://www.cnblogs.com/maosonglin/p/13689549.html