交换排序之冒泡排序
冒泡排序:比较相邻两个元素大小,如果反序,则交换。若按升序排序,每趟排序把最大的数交换到最后的位置,就像气泡从水里冒出一样。
序列{32,26,87,72,26*,17}的冒泡排序过程如下:
冒泡排序算法代码如下:
import java.util.Scanner;
public class BubbleSort {
public static void bubbleSort(int[] keys) {
boolean exchange = true;// 标记是否交换
// 冒泡排序至少需要进行n-1趟排序,如果有一趟没有交换,则已经排好序
for (int i = 0; i < keys.length - 1 && exchange; i++) {
exchange = false;// false表示没有交换
for (int j = 0; j < keys.length - i - 1; j++) {
if (keys[j] > keys[j + 1]) {
int temp = keys[j];
keys[j] = keys[j + 1];
keys[j + 1] = temp;
exchange = true;// 标记为发生交换
}
}
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int[] n = new int[10];
for (int i = 0; i < n.length; i++) {
n[i] = s.nextInt();
}
bubbleSort(n);//调用冒泡排序算法
for (int i = 0; i < n.length; i++) {
System.out.print(n[i] + " ");
}
}
}
冒泡排序的时间复杂度为O(n2),空间复杂度为O(1)
冒泡排序是稳定的排序。