随笔分类 - 排序算法
摘要:说基数排序,其实就是多次的桶排,不过,这里只需要十个桶,基数排序基于多关键字,拿一个数256来说,它被分为各位,十位,百位,每位都是一个关键字,而且关键字的范围都是在0-9的范围内;先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数,和...
阅读全文
摘要:快速排序,纵观各类技术博客,关于快速排序,方法很多,各有千秋,但是,我拙见:快速排序需要用递归,二分,分治的思想去操作,那么在这其中,就需要找一个基准,通过这个基准,把序列分开,达到可以用分治的思想取解决的目的;能看到这里的,基本对快排都有个了解,不多说,盗了几个图看...
阅读全文
摘要:想准备将所有的排序算法都总结出来,方便你查阅,也方便我复习和记忆,下面来说桶排序:首先必须申明,桶排序和计数排序完全不同,不可混为一谈:(这里实例用单链表来操作)还是老方法,看文字就是烦,直接上图,图文结合,永远都是王道:1.假设:桶待排序列:{ 49, 38, 35...
阅读全文
摘要:思想不多说,直接上一张图:(图是盗取的奥,快闭馆了,的抓紧时间):先分解,排序,然后合并,一下是代码:#pragma once//合并两个分组的void MergeSection(int *a, int *tmp, int begin1, int end1, int ...
阅读全文
摘要:思想计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数(此处并非比较各元素的大小,而是通过对元素值的计数和计数值的累加来确定)。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。计数排序对输入的数据有附加的限制条件...
阅读全文
摘要:思想(见图):等同于插入排序,不同的是,插入排序每次只间隔一个元素,而希尔排序间隔 gap个元素,最后一趟又是一边真正的插入排序(间隔一个):代码:#pragma oncevoid ShellSort(int *a, int size){ assert(a); int...
阅读全文
摘要:思想:(见图)方法一:直接上代码:void InsertSort(int *a,int size){ assert(a); int i, j, tmp; for (i = 0; i = 0; --j) //在有序序列中插入后来数 { if (a[j] > t...
阅读全文
摘要:上一篇是堆排序的简单过程,自认为下面这种更为合适:思想:1.建立大堆;2.取堆顶元素和堆尾元素交换;(此时,大堆已破坏,需要重新往下调整,恢复大堆)3.恢复大堆前,需要减掉已经在正确位置的堆尾元素;代码如下:#pragma once////建立大堆,void Adju...
阅读全文
摘要:简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长...
阅读全文
摘要:冒泡排序:N个数;1.两层循环,外层循环N-1遍,控制循环的躺数,(n-1)是因为最后一趟不用比;2.内层,相邻两数比较,大的往后走;每走完一趟,比较次数少一次;3.循环结束,数组有序(升序);代码:#pragma once#includevoid BubbleSor...
阅读全文
摘要:堆排序:1.建大堆;2.堆顶元素和堆最后一个元素交换;3.继续建大堆(从上往下调整);4.再取堆顶元素与堆尾倒数第二个元素交换;5.升序输出代码:#pragma once#include#include//using namespace std; //尽量不要让 u...
阅读全文

浙公网安备 33010602011771号