冒泡排序
- 方式一
- 方式二
public static void main(String[] args) {
//冒泡
int[] array = {5, 7, 2, 3, 9, 4, 8, 6, 1};
// int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
bubble(array);
}
private static void bubble(int[] array) {
int n = array.length - 1; //循环次数
while (true) {
int last = 0; //最后一次发生交换是索引的位置
for (int i = 0; i < n; i++) {
if (array[i] > array[i + 1]) {
System.out.println("交换次数" + i);
swap(array, i, i + 1);
last = i;
}
}
System.out.println(Arrays.toString(array));
n = last;
if (n == 0) {
break;
}
}
}
private static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
选择排序
下面展示一些 内联代码片
。
public static void main(String[] args) {
//选择排序
int[] array = {5, 7, 2, 3, 9, 4, 8, 6, 1};
selection(array);
}
private static void selection(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
//i 表示每轮最小元素需要交换到的索引
int s = i; //最小元素的索引
//循环找出最小元素所在的索引位置
for (int j = s + 1; j < array.length; j++) {
if (array[s] > array[j]) {
s = j;
}
}
if (s != i) {
swap(array, s, i);
}
System.out.println(Arrays.toString(array));
}
}
private static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
二者比较:
- 平均时间复杂度都是O(n^2)
- 选择排序一般快于冒泡排序,因为交换次数少
- 如果有序度较高,冒泡排序更优
- 冒泡属于稳定排序算法,选择排序属于不稳定排序算法