关于排序的总结

来源:互联网 发布:unity3d 2d游戏教程 编辑:程序博客网 时间:2024/05/21 04:25

在数据结构中讲了一些基本的排序方法,在此做一个总结。

1 插入排序

这种排序是每一趟都在找某个带插入元素的位置,找到之后插入到待插入的点。

(1)直接插入排序

这种方法是从数组的第一个元素依次到最后一个元素,当当前为第i个元素时,和前面的元素逐个相比较,以找到其在前面i-1个元素当总的位置然后插入。

算法分析:这种排序算法在最好的情况(即排序前顺序)时,比较的次数为n-1,移动的次数为0;但是在逆序时,比较的次数为(n+2)(n+1)/2,元素移动的次数(n+4)(n-1)/2,因此其时间复杂度为O(N2)

(2)折半插入排序

为了克服直接插入元素在寻找插入位置时需要与已排好序的i-1个元素逐个比较,因此利用了折半查找的方法来确定其插入位置。这中方法相对于直接插入排序,只是减少了其比较的次数,但是没有减少其移动的次数,因此其时间复杂度也为O(N2)

(3)2-路插入排序

(4)表插入排序

这种插入排序在插入过程当中不需要移动元素,当最后确定每个元素的最终位置时,在一次性移动元素,从而减少了前面排序过程当中大量移动元素的缺点。这种算法只是在比较的过程当中以改变元素的指针来代替移动,但是并没有减少比较的次数,因此其时间复杂度也为O(N2)。

(5)希尔排序

2 快速排序

这种排序,每一趟完成之后,一个元素都能找到其最终排序的位置,并放在这个位置上。

(1)起泡排序

每一趟排序完成时,最大/最小的元素都会在未排序元素表的最始端/末端。这种排序算法最坏情况为的比较次数为n(n-2)/2,因此其时间复杂度为O(N2)。

(2)快速排序

快速排序每一趟完成时,一个元素都会找到其最终的位置并放入其中。其时间复杂度为O(nlogn)。

3 选择排序

这种排序每次都会选择到一个最大(或最小)的元素,然后将其依次放入数组中。

(1)简单选择排序

即每次都选择未排序的i——n个元素当中的最小元素。因此第i趟循环需进行的比较次数为n-i,因此其总的比较次数为n(n-1)/2,其时间负责度为O(N2)。

(2)堆排序

为了解决在简单排序过程当中每次比较的无记忆功能,堆排序的思想为首先建立一个大顶堆/小顶堆,这样在每次比较之后就不需要再一个一个去比较了,而只需要重新调整堆即可。其时间复杂度也为O(nlogn)

原创粉丝点击