排序算法总结

排序总结

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,基数排序

posted on 2018-03-23 12:00  米兰达莫西  阅读(107)  评论(0编辑  收藏  举报