关于排序的总结
来源:互联网 发布: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)
- 关于排序的总结
- 自己关于排序的总结
- 关于排序的小总结
- MapReduce1---关于排序的总结
- 关于groupby排序的总结
- 关于内部排序的小总结
- 关于查找排序的一点总结
- 关于堆排序的一点总结
- LintCode 关于排序问题的总结
- 关于数据结构中冒泡排序和选择排序的总结
- 关于一些排序算法的个人总结(初学)
- 关于数据结构三种简单的排序总结
- 总结:python关于一些基本排序算法的实现
- 关于数据库排序算法总结
- 排序:一些排序的总结
- 关于IList的排序
- 关于数据的排序
- 关于排序的问题
- Android Camera系列开发 (二)通过Intent录制视频
- UML软件
- 二分图必须边--poj1486
- SDJZ 1784Digital Roots
- 软件设计之我见--初稿
- 关于排序的总结
- HDU3488:Tour
- 在Myeclipse中安装java Decompiler
- 骑士共存问题 (二分图最大匹配 转换 网络最大流 )
- ural 1057. Amount of Degrees(数位DP,4级)
- hdu4004 二分搜索
- SDJZ 判断三角形形状
- Android Bundle类
- 图像处理中的卷积与模板