冒泡排序
- 冒泡排序, 最好情况时间复杂度O(n), 最坏情况时间复杂度O(n2), 平均情况时间复杂度O(n2)
- 冒泡排序是稳定的排序算法
- 冒泡排序是原地排序算法(空间复杂度O(1))
public static void bubbleSort(int[] value) {
for (int i = 0; i < value.length - 1; i++) {
for (int j = i + 1; j < value.length; j++) {
if (value[i] > value[j]) {
value[i] = value[i] ^ value[j];
value[j] = value[i] ^ value[j];
value[i] = value[i] ^ value[j];
}
}
}
}
冒泡排序优化
public static void bubbleSort2(int[] value) {
for (int i = 0; i < value.length - 1; i++) {
int j = i + 1;
while (value[i] <= value[j]) {
i++;
j++;
}
for (; j < value.length; j++) {
if (value[i] > value[j]) {
value[i] = value[i] ^ value[j];
value[j] = value[i] ^ value[j];
value[i] = value[i] ^ value[j];
}
}
}
}
插入排序
- 插入排序, , 最好情况时间复杂度O(n), 最坏情况时间复杂度O(n2), 平均情况时间复杂度O(n2)
- 插入排序是稳定的排序算法
- 插入排序是原地排序算法(空间复杂度O(1))
public static void insertionSort(int[] value) {
for (int i = 1; i < value.length; i++) {
int tem = value[i];
for (int j = i; j > 0; j--) {
if (tem < value[j - 1]) {
value[j] = value[j - 1];
}else{
value[j] = tem;
break;
}
}
}
}
选择排序
- 选择排序, 最好情况, 最坏情况, 平均情况时间复杂度都是O(n2)
- 选择排序不是稳定的排序算法
- 选择排序是原地排序算法(空间复杂度O(1))
public static void selectionSort(int[] value){
for (int i = 0; i < value.length - 1; i++) {
int min = i;
for (int j = i + 1; j < value.length; j++) {
if(value[j] < value[min]){
min = j;
}
}
if(min != i){
value[i] = value[i] ^ value[min];
value[min] = value[i] ^ value[min];
value[i] = value[i] ^ value[min];
}
}
}