目录
插入排序
直接插入排序
public void insertSort(int arr[]) {
int len = arr.length();
for(int i=2; i<=len; i++) { //将L(2)~L(n)依次插入到前面已排好序的子序列中,初始假定L(1)为有序
if(arr[i] < arr[i-1]) {
arr[0] = arr[i]; //arr[0]暂存,arr[0]也叫哨兵
for(int j=i-1; arr[0] < arr[j]; j--) { //从后往前找到合适位置插入
arr[j+1] = arr[j]; //往后挪
}
arr[j+1] = arr[0];
}
}
}
折半插入排序
待
希尔排序
待
交换排序
冒泡排序(面试必问)
//从前往后,两两比较,大的冒上去,就是一次冒泡,然后冒N-1次(剩下最后一不用排了)
public void bubbleSort(int arr[]) {
int len = arr.length();
for(int i=0; i<len-1; i++) { //从前往后
Boolean flag = false;
for(int j=len-1; j>i; j--) { //从后往前
if(arr[j-1] > arr[j]) {
swap(arr[j-1], arr[j]);
flag = true;
}
}
if(!flag) return;
}
}
快速排序
https://blog.csdn.net/chushoufengli/article/details/79936175
选择排序
简单选择排序
//从arr[i~n]中选择最小的,与arr[i]交换
public void selectSort(int arr[]) {
int len = arr.length();
for(int i=0; i<len-1; i++) {
int min = i;
for(int j=i+1; j<len; j++) {
if(arr[j] < arr[min]) {
min = j;
}
}
if(min != i) swap(arr[min], arr[i]);
}
}
堆排序
https://blog.csdn.net/chushoufengli/article/details/86665128
归并排序
待
基数排序
待