排序算法总结
排序总结
1, 直接插入排序
将序列中的数一个一个插入新的序列,
平均时间复杂度为O(n^2),最好O(n),最坏O(n^2)
空间复杂度O(1)
2, 希尔排序
缩小增量排序,增量不好确定.
平均时间复杂度O(n^1.5),最好O(n),最坏O(n^2)
空间复杂度为O(1)
3, 冒泡排序
逐个相比,依次交换,
平均时间复杂度为O(n^2),最好O(N),最坏O(n^2)
空间复杂度为O(1)
4, 快速排序
选定一个k,将比k小的数放在k左侧,比k大的数放在k右侧
Int quicksort(int* num,int start,int end)
{
异常处理
Int index = rand(start,end);
Swap(Num[index ,Num[end]);
Int small = start – 1;
For(index = start;index < end ;index++)
{
If((num[index]< num[end])
{
Small++;
If(small != index)
{
Swap(num[small],num[index]);
}
}
}
Small++;
Swap(num[small],num[end]);
Return small;
}
Void qk(int *num,int start,int end)
{
If(start == end) return;
Int index = quicksort(num,start,end);
}
平均时间复杂的为O(nlog2n),最好O(nlog2n),最坏O(n^2)
空间复杂度O(nlog2n)
5, 选择排序
N次遍历,每一次选出最小的数与第一个数交换
平均时间复杂的O(n^2),最好O(n^2),最坏O(n^2)
空间复杂度O(1)
6, 堆排序
将堆整理成大顶堆或小顶堆,交换堆顶和堆尾,剩余元素继续堆排序,循环往复
平均时间复杂度O(nlog2n),最好O(nlog2n),最坏O(nlog2n)
空间复杂度O(1)
7, 归并排序
将一维数组中前后两个相邻的有序序列归并为一个有序序列。
平均时间复杂度O(nlog2n),最好O(nlog2n),最坏O(nlog2n)
空间复杂度O(1)
8,基数排序