1.插入排序:
(1)直接插入排序:
对应图解:
对应代码为:
public static void insertSort(int[] array){
for(int i = 1;i<array.length;i++){
int temp = array[i];
int j = 0;
for (j = i-1;j>=0;j--){
if(array[j]>temp){
array[j+1] = array[j];
}else{
break;
}
}
array[j+1] = temp;
}
}
注:时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:稳定
(2)希尔排序:采用分组的思想,其对应分组最好为素数,并且最终素数必须为1
对应图解:
对应代码:
public static void shellSort(int[] array,int gap){
for (int i = 1;i<array.length;i++){
int temp = array[i];
int j = 0;
for (j = i-gap;j>=0;j-=gap){
if(array[j]>temp){
array[j+gap] = array[j];
}else{
break;
}
}
array[j+gap] = temp;
}
}
注:时间复杂度:O(N^1.3~N^1.5) 空间复杂度:O(1) 稳定性:不稳定
2.选择排序:
(1)选择排序:
对应图解:
对应代码:
public static void selectSort(int[] array){
for (int i = 0;i<array.length;i++){
for (int j = i+1;j<array.length;j++){
if (array[j]<array[i]){
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
}
注:时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:不稳定
3.交换排序:
(1)冒泡排序:
对应图解:
对应代码:
public static void bubbleSort(int[] array){
for (int i = 0;i<array.length-1;i++){
boolean flag = false;
for (int j = 0;j<array.length-1-i;j++){
flag = false;
if (array[j]>array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag = true;
}
}
if(!flag){
break;
}
}
}
注:时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:稳定