交换排序的基本思想是,比较两个记录的大小,如果这两个记录的大小出现逆序,则交换这两个记录,这样将较小的记录向序列前部移动,较大的记录向序列后部移动。首先我们来看交换排序中的第一种排序---冒泡排序,首先将第一个记录的键值和第二个键值进行比较,若为逆序,,则将这两个记录交换,然后继续比较第二个和第三个记录的大小,依此类推,直到完成第n-1个记录和第n个记录的大小比较交换为止,上述过程称为第一趟冒泡,其结果使值最大的记录移到了第n个位置上,然后再进行第二趟冒泡,即对前n-1个记录进行同样的操作,其结果是次大值的记录安置在第n-1个位置上,重复上面的过程,当在一趟起泡过程中没有进行记录交换的操作时,整个排序过程终止。
- 时间复杂度:O(n2)
- 空间复杂度:O(1)
- 稳定性:稳定
- 复杂性:简单
public class BubbleSort {
public void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {// 外层循环控制排序趟数
for (int j = 0; j < arr.length - i - 1; j++) {// 内层循环控制每一趟排序多少次
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
测试代码
public class Test {
public static void main(String[] args) {
int[] a = { 10, 7, 3, 5, 9, 1, 6, 8, 2, 4 };
System.out.println("排序前:" + Arrays.toString(a));
BubbleSort bubbleSort = new BubbleSort();
bubbleSort.bubbleSort(a);
System.out.println("冒泡法排序后:" + Arrays.toString(a));
}
}
运行结果