排序
文章平均质量分 57
kingdragonfly
这个作者很懒,什么都没留下…
展开
-
排序算法总结(四)希尔排序
希尔排序又称缩小增量排序,是插入排序的一种。它的基本思想是先将整个待排记录序列分割成若干个子序列,然后对这若干个子序列分别进行直接插入排序,等到待排序列基本有序时,再对整个序列进行直接插入排序。 比如如下数组,先已step=5进行分割。 49,38,65,97,76,13,27,49,55,4 由于step=5,则 将49与13排序,38与27排序,65与49排序,97与55排序,76与4排原创 2013-09-13 17:03:41 · 653 阅读 · 0 评论 -
排序算法总结(六)归并排序
归并排序是将数组中数两两合成有序表,然后再将有序表两两合成新的有序表,直到所有有序表合成一个有序表,完成排序。 归并排序是稳定的排序算法,需要辅助空间O(n),最好和最坏的情况下时间复杂度都是O(nlogn)。 参考代码: #include using namespace std; void Sort(int *arrays, int start, int mid, int e原创 2013-09-13 19:07:54 · 660 阅读 · 0 评论 -
排序算法总结(三)插入排序
插入排序的原理是从数组的某个位置开始依次和前面的位置数相比,找到插入位置,将数插入到该位置,这样多次插入后,得到的将是一个有序数组。 参考代码: #include using namespace std; void InsertSort(int *arrays,int len); int main(void) { int i; int arrays[]={9,8,7,6,原创 2013-09-13 16:10:13 · 569 阅读 · 0 评论 -
排序算法总结(五)快速排序
快速排序的思想是选取待排数组中的一个数作为中间数(一般是第一个数),然后将数组中数与这个中间数进行比较,使中间数左边的数都小于中间数,中间数右边的数都大于中间数,这样中间数就在正确的位置上,然后将左右两部分再次进行相同的操作,最终会得到一个有序的数组。 快速排序的算法平均时间复杂度为O(nlogn),最坏的情况每次划分将数组分成1和n-1两部分,算法时间复杂度为O(n2),需要辅助空间为O(lo原创 2013-09-13 18:59:43 · 570 阅读 · 0 评论 -
排序算法总结(一)计数排序
比较排序算法时间复杂度下界为O(nlogn),这里介绍一种非比较排序算法:计数排序,其时间复杂度为O(n)。 计数排序原理 假定有三个数组,A,B,C,A为待排序数组,B为输出数组,C为临时数组。 计数排序的思想是对于A中每一个元素x确定小于等于x元素个数n,将其保存到临时数组C中,这样通过查找临时数组C可以直接确定待排序数组各元素位置,从而避免比较。 假定数组A保原创 2013-09-06 22:51:03 · 866 阅读 · 0 评论 -
排序算法总结(二)基数排序
前文介绍过计数排序,虽然其时间复杂度为O(n),但是其辅助空间需求较大,对于一个待排序正数数组A其所需辅助空间为max(A),当A中数值较大时辅助空间难以接受。下面介绍一种在计数排序基础之上改进的排序算法基数排序,其时间复杂度为O(1),并且只消耗10个辅助空间。 基数排序原理: 假定A={319,456,657,656,436,920,359}我们可以按照如下规则排序: 先按原创 2013-09-08 22:31:00 · 659 阅读 · 0 评论 -
排序算法总结(七)冒泡排序
冒泡排序的思想是从开始位置不断比较相邻两位置数字大小,这样第一轮将最大的数字替换到最后面的位置,第二轮将次大数字换到倒数第二位置,逐步完成排序。 参考代码: #include using namespace std; void BubbleSort(int *arrays,int n); void main() { int i; int arrays[]={1,4,5,原创 2013-09-18 14:10:46 · 613 阅读 · 0 评论