排序算法
风中舵手
个性、快乐、勇气
展开
-
排序(二)---希尔排序
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很转载 2016-04-11 16:09:21 · 238 阅读 · 0 评论 -
快速排序的非递归实现
快速排序的非递归实现首先说明一下快速排序是对冒泡排序的改进。为什么这么说呢?想一下冒泡排序,它把序列分成了两部分,前半部分无序,后半部分升序排列,并且后半部分的数都大于前半部的数。由此可得到快速排序和冒泡排序的一些共同点:都要经历n趟排序每趟排序要经历O(n)次比较都是后半部分元素比前半部大而不同之处就在于冒泡排序的交换操作发生相邻的元素之间,即一趟排序可以要经过多次交转载 2016-05-31 20:55:52 · 328 阅读 · 0 评论 -
外部排序
在网上找了不少的资料,不够全面也不够清楚,这里组合和修改一下两份资料,将外部排序中过程详细的介绍下参考网址(http://www.cnblogs.com/songQQ/archive/2011/02/22/1961071.html and http://chenkegarfield.blog.163.com/blog/static/62330008200910249526638/)转载 2016-04-21 11:56:42 · 351 阅读 · 0 评论 -
next_permutation函数
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件下面是以前的笔记 与之完全相反的函数还有prev_permutation (1) int 类型的next_permutation int main(){ int a[3];a[0]=1;a[1]=2;a[2]=3; do{cout} while (next_permutat转载 2016-05-25 16:10:23 · 216 阅读 · 0 评论 -
next_permutation函数
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件下面是以前的笔记 与之完全相反的函数还有prev_permutation (1) int 类型的next_permutation int main(){ int a[3];a[0]=1;a[1]=2;a[2]=3; do{cout} while (next_permutat转载 2016-05-24 21:55:40 · 220 阅读 · 0 评论 -
稳定排序和不稳定排序
这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相转载 2016-04-11 21:28:33 · 220 阅读 · 0 评论 -
各种排序算法时间复杂度和空间复杂度表
在网上看到一个常用排序算法的时间复杂度和空间复杂度表格,自己整理了一下,如下:转载 2016-04-11 21:27:38 · 577 阅读 · 0 评论 -
排序(五)---基数排序
基数排序是另外一种比较有特色的排序方式,它是怎么排序的呢?我们可以按照下面的一组数字做出说明:12、 104、 13、 7、 9 (1)按个位数排序是12、13、104、7、9 (2)再根据十位排序104、7、9、12、13 (3)再根据百位排序7、9、12、13、104 这里注意,如果在某一位的数字相同,那么排序结果要根据上一轮的数组确转载 2016-04-11 19:14:55 · 356 阅读 · 0 评论 -
九大排序算法再总结
出处: http://blog.csdn.net/xiazdong本文是 http://blog.csdn.net/xiazdong/article/details/7304239 的补充,当年看了《大话数据结构》总结的,但是现在看了《算法导论》,发现以前对排序的理解还不深入,所以打算对各个排序的思想再整理一遍。本文首先介绍了基于比较模型的排序算法,即最坏复杂度都在Ω(nlgn)的排序转载 2016-04-11 21:29:54 · 248 阅读 · 0 评论 -
排序(四)---简单选择排序
要点简单选择排序是一种选择排序。选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 简单排序处理流程: ( 1 )从待排序序列中,找到关键字最小的元素;( 2 )如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;( 3 )从余下的 N - 1 个元素中,找出关键字最小的元素,重复( 1 )转载 2016-04-11 16:54:46 · 306 阅读 · 0 评论 -
排序(三)---归并排序
要点归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并排序的基本思想将待排序序列R[0...n-1]看成是n个长度为1的有序序列,将相邻的有序转载 2016-04-11 16:46:31 · 198 阅读 · 0 评论 -
排序(一)---直接插入排序
1.直接插入排序1) 定义直接插入排序( straight insertion sort )是一种最简单的排序方法。它的基本操作是将一个记录插入到一个长度为 m (假设)的有序表中,使之仍保持有序,从而得到一个新的长度为 m + 1 的有序表。2) 算法思路设有一组关键字{ K 1 , K 2 ,…, K n };排序开始就认为 K 1 是一个有序序列;让 K 2 插入上述表转载 2016-04-11 15:52:48 · 434 阅读 · 0 评论 -
快速排序算法在平均情况下的时间复杂度为 求详解
时间复杂度为O(nlogn) n为元素个数1. 快速排序的三个步骤:1.1. 找到序列中用于划分序列的元素1.2. 用元素划分序列1.3. 对划分后的两个序列重复1,2两个步骤指导序列无法再划分所以对于n个元素其排序时间为 T(n) = 2*T(n/2) + n (表示将长度为n的序列划分为两个子序列,每个子序列需要T(n/2)转载 2016-08-08 16:57:01 · 6165 阅读 · 0 评论