
排序
文章平均质量分 85
玲max
这个作者很懒,什么都没留下…
展开
-
直接插入排序
直接插入排序的基本思想: 顺序的将待排序的数据元素按其关键字值的大小插入到已排序数据元素子集合的适当的位置,子集合的数据元素从只有一个数据元素开始逐次增大,当子集合大小最终与集合大小相同时排序完毕。设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0...原创 2018-07-06 09:21:12 · 139 阅读 · 0 评论 -
交换排序
交换排序:就是把一个数字,依次的往后比较,遇到比它小的就进行交换。这是第一趟比较,所以第一趟比较完了之后,最小的 就在第一个,其他几次比较都类似。例如:#include<stdio.h>//交换排序,通比较,把最小的放在第一个位置上void swap(int &a,int &b){ int temp=a; a=b; b=t...原创 2018-07-05 16:39:17 · 193 阅读 · 0 评论 -
冒泡排序
冒泡排序的原理: 冒泡排序和水泡在水中不断往上冒的情况类似。 冒泡排序:相邻元素两两比较,大的往后放,第一次完毕之后,最大值就找到了。例如:冒泡排序的代码(未优化):#include<stdio.h>#include<stdlib.h>#include<string.h>void swap(int &a,int &b){ in...原创 2018-07-05 10:04:07 · 266 阅读 · 0 评论 -
希尔排序
希尔排序的基本思想: 把待排序的数据元素分成若干个小组,对同一个小组内的数据元素用直接插入法排序;小组的个数逐次缩小,当完成了所有的数据元素都在同一个小组内的排序后,排序过程结束。希尔排序又称为缩小增量排序。希尔排序的过程图:总结:希尔排序就通过缩小增量使得,数据逐渐变得有序,直到增量d=1,使得数据变得完全有序。完整代码:#include<stdio.h>#incl...原创 2018-07-06 09:43:52 · 1140 阅读 · 0 评论 -
堆排序
堆排序实际上就是一个完全二叉树堆的存储: 一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2。它的左右子结点下标分别为2 * i + 1和2 * i + 2堆排序就是利用堆进行排序的算法,它的基本思想是: 1.将待排序的序列构造成一个大顶堆(或小顶堆) 大顶堆---从小到大 2.此时,这个序列的最大值就是堆顶的根结点,将它移走(就是将其与堆数组...原创 2018-07-06 12:54:24 · 223 阅读 · 0 评论 -
快速排序及快速排序的优化(完整版)
快速排序的的基本思想: 设数组a中存放了n个数据元素,low为数组的低端下标,high为数组的高端下标,从数组a中任取一个 元素(通常选取a[ow])作为标准,调整数组a中各个元素的位置,使排在标准元素前面的元素的关键字均小于标准元素的关键字,排在标准元素后面元素的关键字均大于或等于标准元素的关键字。一次结束后,把标准元素放在适合的位置,并且把以标准元素为中心划分了两个子数组,前面数组的...原创 2018-07-07 21:30:45 · 14159 阅读 · 2 评论 -
归并排序(递归和非递归)
归并排序主要讲二路归并排序二路归并排序的基本思想: 设数组a中存放了n个数据元素,初始时把他们看成是n个长度为1的有序子数组,然后从第一个子数组开始,把相邻的子数组进行两两合并,的到n/2的整数上界个长度为2的新的有序子数组(当n为奇数时最后一个新的有序子数组的长度为1);对这些新的有序子数组在两两归并;如此重复,直到得到一个长度为n的有序数组为止。归并排序的过程图:归并排序的完整代码(非...原创 2018-07-07 22:35:46 · 327 阅读 · 0 评论