经典排序算法
本博客的主要作为自己的学习笔记,并不是以教授知识为目的。如果有人能从我的博客中学到东西,我很高兴。有人发现文章中有不对的地方,也欢迎大家纠正。
博弈Dream
code and code
展开
-
常用排序之冒泡排序法
冒泡排序一般是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成,冒泡排序是一种稳定排序。原理冒泡排序算法的运作如下:(从后往前) 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对...原创 2017-09-02 08:55:38 · 1391 阅读 · 0 评论 -
常用排序之插入排序法
算法描述 何为插入排序呢?顾名思义,即向一个有序数据序列中插入一个数,插入此数后的序列仍然有序。具体描述如下: 假如有一个数组: ⒈ 从第一个元素开始,该元素可以认为已经被排序 ⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描 ⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置 ⒋ 重复步骤3,直到找到已排序...原创 2017-09-03 09:52:38 · 1472 阅读 · 0 评论 -
常用排序之希尔排序法
算法描述 希尔排序是插入排序的一种,也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。具体描述如下: 假如有一个大小为n数组,一般取一个增量d=n/2,将数组的元素进行分组。 所有距离为d的倍数的元素被分到一组中,先在各组内进行直接插入排序。再取第二个增量d2重复上述分组和排序,直至所取增量为1,此时所有记录放在同一组中进行直接插入排序。改进的目的基于以下两点: ...原创 2017-09-04 10:15:30 · 1463 阅读 · 0 评论 -
常用排序之选择排序法
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法 具体描述 对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现...原创 2017-09-06 09:04:45 · 1482 阅读 · 0 评论 -
常用排序之堆排序法
什么是堆?堆实际上是一棵完全二叉树,堆分为大顶堆和小顶堆,大顶堆的堆顶的关键字是最大的,小顶堆的堆顶的关键字是最小的。堆排序思想:利用大顶堆(小顶堆)堆顶记录的是最大关键字(最小关键字)这一特性。一般用数组来表示堆,如下所示:堆的操作insert (插入) 为将一个元素X插入到堆中,我们在下一个空闲位置创建一个空穴,否则该堆将不是完全树。如果X可以放在该空穴中而不破坏堆...原创 2017-09-07 10:32:57 · 2186 阅读 · 0 评论 -
常用排序之归并排序法
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定排序。归并过程 比较a[i]和b[j]的大小,若a[i]≤b[j],则将第一个有序表中的元素a[i]复制到r...原创 2017-09-08 11:35:39 · 1406 阅读 · 0 评论 -
常用排序之快速排序法
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。算法描述 1、设置两个变量i、j,排序开始的时候:i = 0,j = N-1; 2、以第一个数组元素作为关键数据,赋值给key,即key = A[0]; ...原创 2017-09-13 15:58:48 · 1653 阅读 · 0 评论 -
常用排序之计数排序
计数排序是一种非比较排序算法。计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。计数排序是稳定的。基本思想 对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上了。例如,如果有17个元素小于x,则x就应该在第18个输出位置上。当有几个元素相同时,这一方案要修改,因为不能把它们放在同一个输出位置...原创 2018-03-20 15:36:05 · 1421 阅读 · 0 评论 -
常用排序之基数排序
基数排序属于“分配式排序”,又称“桶子法”。它是通过键值的信息,将要排序的元素分配至某些“桶”中,以达到排序的作用。基数排序属于稳定性排序。时间复杂度 基数排序的时间复杂度为O(nlog(r)m),其中r为所采取的基数,而m为堆数。基本原理 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这...原创 2018-03-22 09:07:11 · 1169 阅读 · 0 评论 -
常用排序之桶排序
桶排序假设输入数据服从均匀分布,平均情况下它的时间代价为O(n)。与计数排序类似,因为对输入数据作了某种假设,桶排序的速度也很快。具体来说,计数排序假设输入数据都属于一个小区间内的整数,而桶排序则假设输入是由一个随机过程产生,该过程将元素均匀、独立地分布在[0,1)区间上。工作原理 桶排序将[0,1)区间划分为n个相同大小的子区间,或称为桶。然后,将n个输入数分别放到各个桶中...原创 2018-03-24 11:12:12 · 379 阅读 · 0 评论