排序算法系列
shallnet
一个没赶上脑残一代90后的80后程序猿!
展开
-
排序算法之概述
排序是计算机程序设计中的一种重要操作。所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下: 输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。 输出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。1.被排序对象--文件 被排序的对象--文件由一组记录组成。 记录则由若干个数据项(或域)组成。其中有一项可用来标识一个记录,称为关键字项。该数据项的值称为关键字(Key)。2.排序原创 2011-11-17 09:01:18 · 944 阅读 · 0 评论 -
排序算法之插入排序
本节主要分析插入排序算法的直接插入排序和希尔(shell)排序(又称缩小增量排序)。1. 直接插入排序 该排序是最简单的排序方法,其基本思想是:假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。直接插入排序算法:[cpp] view plaincopy01.void insert_sort(sqlist *原创 2011-12-06 09:19:22 · 1684 阅读 · 0 评论 -
排序算法之选择排序
选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。常用的选择排序方法有简单选择排序(Simple Selection Sort)和堆排序(Heap Sort)。原创 2011-12-20 09:10:36 · 1112 阅读 · 0 评论 -
排序算法之归并排序
归并排序(Merge Sort)是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。1. 归并排序思想初始序列为n个记录,可看成n个有序的子序列,每个序列长度为1,然后两辆归并,直到得到n/2或n.2+1个长度为2或1的子序列,再两两归并,······,如此重复,直到得到一个长度为n的有序序列为止。这种排序称为2-路归并排序。算法三步骤:原创 2011-12-20 09:12:37 · 1025 阅读 · 0 评论 -
排序算法之交换排序
(1) 冒泡排序思想:第一趟排序:首先将第一个记录的关键字和第二个记录的关键字比较,若为逆序,则将两个记录交换之,然后比较第二个和第三个的关键字。以此类推,直至第n-1个记录和第n个记录关键字比较为止。该过程为第一趟排序,使得最大的关键字排到了最后面。第二趟排序:对前n-1个记录进行相同操作,完成后使得次大的关键字排在n-1位置上。以此类推,进行第三、四次排序直到排序结束。判断排序结束条件是:在一趟排序过程中没有发生过交换记录的操作。一般第i趟排序是从第1个元素到(n-i+1)个记录依次比较相邻两原创 2011-12-06 09:31:11 · 1277 阅读 · 0 评论 -
排序算法之总结
前面几节讲了几种排序算法(包括算法思想、算法实现、算法分析),本节将要对这几种算法进行一个综合比较分析,大致有如下结果:排序算法平均时间最坏情况稳定性辅助存储直接插入排序 O(n2) O(n2) 稳定 O(1) Shell排序O(nlogn)O(ns) 1<s<2不稳定O(1)冒泡排序 O(n原创 2012-01-05 11:23:15 · 964 阅读 · 0 评论