![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
文章平均质量分 53
清枫若待佳人醉
目前就职腾讯,从事推荐引擎相关工作,有感兴趣的可以互相讨论。
展开
-
直接插入排序及其优化
直接插入直接插入排序是一种最简单的排序方法,基本操作就是将一个记录插到已排序的序列中,从而得到一个新的序列。 就类似于我们平时生活中的打扑克牌,你起手拿到一张牌,然后接下来每拿到一张牌后,比它大则插在右边,比它小插在左右,这样,你手上的牌始终保持着有序。下面以升序来作介绍:每一次都拿着待插入的数,依次向左计较。 拿i = 7这次来看一次完整的插入。 依据这种思路,代码如下:#include<i原创 2017-10-09 20:22:49 · 2517 阅读 · 0 评论 -
快速排序(三种算法实现和非递归实现)
快速排序(Quick Sort)是对冒泡排序的一种改进,基本思想是选取一个记录作为枢轴,经过一趟排序,将整段序列分为两个部分,其中一部分的值都小于枢轴,另一部分都大于枢轴。然后继续对这两部分继续进行排序,从而使整个序列达到有序。递归实现:void QuickSort(int* array,int left,int right){ assert(array); if(left &gt;=原创 2017-11-29 18:41:44 · 195102 阅读 · 66 评论 -
冒泡排序
冒泡排序(Bubble Sort)见名知意,就是从前至后依次比较相邻的两个数据的大小,将大的往后移动,这样经过一次完整的比较和移动,就可以将序列中最大的一个数放置到序列的最后,这也就是它名字的由来,就像水里的水泡一样, 越往上浮越大。算法过程:比较相邻的元素,如果第一个比第二个大,就交换两个的位置。从序列的开头一直到结尾一直重复这样的工作,这样一趟结束够就可以将最大的数放置到最后。进行第二趟排原创 2017-12-01 11:21:44 · 314 阅读 · 0 评论 -
基数排序
基数排序(Radix Sorting)是一种与其他排序算法完全不同的排序方法,其他的排序算法都是通过关键字之间的比较和移动来完成的,而基数排序则不需要比较,而是采用一种多关键字的思想。什么是多关键字的思想呢? 给定一组数据,我可以先按个位的大小对所有数进行排序,然后再按十位进行排序,一直到最高位,这样就可以使整组数据变得有效,这样从最低位开始的方法称为最低位优先(Least Significant原创 2017-12-01 10:00:50 · 500 阅读 · 0 评论 -
计数排序
计数排序(Count Sort)是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。计数排序的思想类似于哈希表中的直接定址法,在给定的一组序列中,先找出该序列中的最大值和最小值,从而确定需要开辟多大的辅助空间,每一个数在对应的辅助空间中都有唯一的下标。原创 2017-11-30 15:39:46 · 7820 阅读 · 4 评论 -
归并排序
归并排序(Merging Sort)。”归并”的意思就是将两个或者两个以上的有序序列组合成一个新的有序表,类似于将两个有序单链表合并成一个有序单链表那道面试题一样。基于这样分而治之思想,假定给定一段序列要求排序,那么可以划分成子问题,将整段序列划分成左右两段,只要左右两段分别有序,那么该序列就有序,然后依次划分,直到划分为单个数据作为一组,一个数据肯定是有序的。如图: 因为每次都要对两个有序区间进原创 2017-11-30 12:59:30 · 357 阅读 · 0 评论 -
堆排序
堆排序(Heap Sort) 1991年的计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了著名的堆排序算法( Heap Sort )它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素,对应的是完全二叉树,堆分为大顶堆和小顶堆。对于堆的详细概念,可见博文堆的实现以及优先级队列堆的构建:利用原创 2017-11-30 11:44:41 · 277 阅读 · 0 评论 -
选择排序
选择排序的思想为,在一组待排序列中,每一趟在n-i+1(i=1,2,3…,n-1)个记录中选取关键字最大/最小,作为有序序列中第i个记录。很显然,相对于直接插入来说,选择排序的记录移动操作次数较小。 但是选择排序无论待排序列是有序还是无序,它对关键字的比较字数是不变的,都为n(n-1)/2。因此总的时间复杂度还是O(n²)下面就以升序来看一个简单序列吧。 蓝色框里的是待排序列,每经过一次排序,待原创 2017-11-29 12:50:51 · 398 阅读 · 0 评论 -
希尔排序
希尔排序(Shell’s Sort)顾名思义,是一个叫Shell的人发明的算法。希尔排序又称为”缩小增量排序”,是针对直接插入的一种极端情况的优化。直接插入排序的时间复杂度是O(n²),但是如果待排序列有序的话,插入排序的时间复杂度可以达到O(n),所以如果待排序列是接近有序的话,那么直接插入的效率就可以大大提到了。希尔排序的基本思想是将待排序列分成若干个子序列,分别对其采用直接插入,等待排序列基本原创 2017-11-28 21:47:35 · 355 阅读 · 0 评论 -
九种常见排序的比较和实现
首先排序算法大的可以分为:关键字比较非关键字比较关键字比较关键字比较就是通过关键字之间的比较和移动,从而使整个序列有序, 而关键字比较的算法,又可以像下面这样划分:对于排序算法之间的比较,无异于时间复杂度和空间复杂度,看下面这张表格 由上表不难得出下面这几个重要的点:从平均时间性能而言,快速排序最佳,其所需时间最佳,但快速排序在最坏情况下的时间性能不如堆排序和归并排序。堆排序和归并之间,原创 2017-12-01 13:24:02 · 936 阅读 · 0 评论