
排序算法
文章平均质量分 71
liu_qiqi
这个作者很懒,什么都没留下…
展开
-
排序系列--快速排序(实现+复杂度分析)
交换排序类:冒泡排序,快速排序他们的共同点就在于,通过记录的交换,最终得到想要的结果。下面实现快速排序。思想:通过一趟排序将待排记录划分为两部分。(作为划分标记的记录,已经保证是在它正确的位置)再对那两部分,再进行划分。知道划分为一个一个单独的数据,此时,所有记录已经是排好序了。 复杂度分析:快速排序的时间性能取决于快速排序递归的深度。我们假设在最优情况下,partitio原创 2013-01-11 22:44:21 · 591 阅读 · 0 评论 -
排序系列--冒泡排序
交换类排序:冒泡排序,快速排序之前有一种错误的认识,一直称作冒泡排序的算法,其实不是真正的冒泡排序。因为真正的冒泡排序,是两两比较相邻记录。最最容易的排序代码如下: for (i=1; i { for(j=i+1; j { if (a[i] > a[j]) { tmp = a[i];原创 2013-01-11 23:01:49 · 443 阅读 · 0 评论 -
排序系列--希尔排序
前面说过,直接插入排序时希尔排序的一个特例。是增量为1的希尔排序。思想:以相差同一个increment增量的记录为一个子序列,将这个子序列进行排序。汇集多个子序列,然后改变increment的值(减小),这样形成新的子序列,此时的子序列的记录比上一次的多,使更多的记录基本有序。如此不断,知道最后将整体所有的记录以increment为1,进行直接插入排序。(基本有序,保证了小数基本在前,大数基本原创 2013-01-10 22:52:16 · 379 阅读 · 0 评论 -
排序系列--直接插入排序
根据在排序过程中的主要操作,可分为四大类:插入排序类:直接插入排序,希尔排序选择排序类:简单选择排序,堆排序交换排序类:冒泡排序,快速排序归并排序类:归并排序下面来说下他们的思想,就知道为什么事这四大类了:插入排序类:都是对已经存在的记录进行移动,然后将某个记录插入相应的位置。直接插入排序:是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表。(原创 2013-01-10 22:32:03 · 643 阅读 · 0 评论 -
排序系列--堆排序
选择类排序--堆排序思想:1.建立大顶堆(小顶堆),此时产生的序列并不是有序的。但是确是局部有序的。因为堆是完全二叉树,且每个结点的值都大于或者等于其左右孩子。a[s]>=a[2*s],a[s]>=a[2*s+1],注意结点关系。--根据完全二叉树得到的性质。如何建堆呢?从length/2开始到结点1(均不是叶子结点),对每个结点进行调整。从length/2+1到length,均是叶子原创 2013-01-14 20:46:27 · 507 阅读 · 0 评论 -
归并排序
递归实现,挺麻烦,时间复杂度为O(nlogn),归并排序的过程,像极了一颗倒置的完全二叉树,高度为logn,可以理解为,对每一个元素都要进行深度为logn的归并。空间复杂度为O(n+logn)void Merge(int in[],int out[],int i,int m,int n){ int j,k,t; for(k=i,j=m+1; i { if(in[i]原创 2013-06-22 11:45:28 · 1068 阅读 · 0 评论