数据结构-排序
SoWhat1412
微信搜索【SoWhat1412】,第一时间阅读原创干货文章。人之患、在好为人师、不实知、谨慎言。点点滴滴、皆是学问、看到了、学到了、便是收获、便是进步。
展开
-
2-简单选择排序
2.简单选择排序,无论最好最坏 都要比较n-1 n-2......1 = n(n-1)/2次 最好交换次数为0次 最坏交换次数为n-1次 时间复杂度为O(n^2),不稳定 如 3‘ 3 1 排序后为1 3 3’ #include using namespace std; void SelectSort(int a[], int n) { int num=0; fo原创 2017-03-07 14:06:47 · 596 阅读 · 3 评论 -
4-希尔排序ShellSort
希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进。希尔排序又叫缩小增量排序 关键在于增量 的选择 我们来通过演示图,更深入的理解一下这个过程。 #include #include using namespace std; void ShellSort(int *a, int n) { int step = n/2; //先按增量step n原创 2017-03-08 14:16:48 · 699 阅读 · 1 评论 -
5-堆排序
5. 堆排序 堆是指具有下列性质的完全二叉树 完全二叉树 i的双亲是[i/2] 根节点一定最大或者最小 ! 1 每个节点的值>=其左右节点的值 大顶堆 2 每个节点的值 堆排序 Heap Sort 就是利用堆进行排序 如大顶堆。 将带排序的数列构造程一个大顶堆 然后将跟节点与堆数组末尾元素互换,然后原创 2017-03-08 15:57:39 · 628 阅读 · 1 评论 -
6-归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。NlogN 由于需要两两比较 因此也是稳定的! 首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。 //将有序原创 2017-03-12 16:08:39 · 1086 阅读 · 2 评论 -
7-快速排序
https://zhidao.baidu.com/question/498320427100370484.html 快速排序是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。 思想 快速排序采用的思想是分治思想。Portition 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大原创 2017-03-24 10:47:09 · 817 阅读 · 0 评论 -
3-插入排序
3.插入排序 最好的情况下 本来就是1 2 3 4 5 比较次数为n-1 次移动次数为 0 最坏的情况下 本来就是 5 4 3 2 1 比较次数为2+3+4+...+n=(n+2)(n-1)/2, 移动次数为(n+4)(n-1)/2 时间复杂度也为O(n^2) #include using namespace std; void InsertSort(int *a, i原创 2017-03-07 17:25:47 · 506 阅读 · 0 评论 -
8-桶排序B
BucketSort 适合数据比较集中的数字排序! 桶排序的时间复杂度为 O(N) 不稳定 整体的思想是 统计 这些集中数字出现的次数,然后输出放到原始数组中就好。 最快的排序算法是桶排序 所有排序算法中最快的应该是桶排序(很多人误以为是快速排序,实际上不是.不过实际应用中快速排序用的多)但桶排序一般用的不多,因为有几个比较大的缺陷. 1.待排序的元素不能是负数,小原创 2017-07-10 16:35:27 · 673 阅读 · 0 评论 -
Python十大排序算法
代码如下: 快排 ''' 几乎是我们学习排序入门算法了,两次遍历,时间复杂度较高n*n,稳定排序 ''' def bubbleSort(tmpList): for i in range(len(tmpList)-1): for j in range(len(tmpList)-1,i,-1): if tmpList[j-1] > tm...原创 2018-12-05 19:39:25 · 15132 阅读 · 3 评论