借助比较的排序每次比较贡献O(1)的复杂度
插入排序 最少n-1 最多n(n-1)/2
冒泡排序 最少n-1 最多n(n-1)/2
选择排序 n(n-1)/2
- int partition(int *arr , int low , int high)
- {
- int pivo = arr[low];
- while(low < high)
- {
- while(low < high && arr[high] >= pivo)
- --high;
- arr[low] = arr[high];
- while(low < high && arr[low] <= pivo)
- ++low;
- arr[high] = arr[low];
- }
- arr[low] = pivo;
- return low;
- }
- // 快速排序 递归
- void qsort(int *arr , int low , int high)
- {
- if(low < high)
- {
- int pivo = partition(arr , low , high);
- qsort(arr , low , pivo-1);
- qsort(arr , pivo+1 , high);
- }
- }
总共比较次数nlogn -- n^2
希尔排序 ??
归并排序 在每一次二路归并的过程中,对于N个元素:当一个数组的最小元素比另一数组的最大元素还大时;若两个数组元素交替增长,比较次数最多,为2N-1
再加上递归深度logN,故比较次数为 NlogN -- (2N-1)logN
堆排序 ??