排序算法合集
文章平均质量分 68
冒泡排序、插入排序、选择排序、希尔排序、归并排序、快速排序、堆排序、桶排序、基数排序
朱传林
每个不曾起舞的日子,都是对生命的辜负!
展开
-
计数排序C++实现
//counting sort//计数排序基于一个假设,待排序数列的所有数均出现在(0,k)的区间之内,如果k过大则会引起较大的空间复杂度//计数排序并非是一种基于比较的排序方法,它直接统计出键值本应该出现的位置//时间复杂度为O(n),空间复杂度为O(n+k)#include#includeusing namespace std;void countSort(vector&原创 2015-08-24 17:03:30 · 1692 阅读 · 1 评论 -
归并排序C++实现
//merge sort//归并排序是通过将两个有序的数列合并成一个有序的数列的排序过程;//具体流程可以看成一个树形结构,最底层是两个结点合并,往上合并的结点个数越多,所以时间复杂度为O(nlgn);#include#includeusing namespace std;//二路归并,当然也可以多路归并,核心templatevoid merge(vector& vec,原创 2015-08-24 15:51:21 · 943 阅读 · 0 评论 -
桶排序C++实现
//bucket sort//现在假设我有一堆蛋,包括麻雀蛋、鸡蛋、恐龙蛋,相同类别蛋的大小是一样的,现在我要将这几种蛋排序下序;//有点常识就知道,这三种类别的蛋大小是不一样的,现在我对这三种蛋进行排序,我是这样排的://准备三个桶,把同一类别的蛋放到同一个桶中,然后按顺序从三个桶中取出相应蛋排序;//即,从放有麻雀蛋的桶里取出所有麻雀蛋,依次排好序,大小都一样,随便怎么排了,然后再将鸡原创 2015-08-24 10:54:28 · 4119 阅读 · 3 评论 -
希尔排序C++实现
//shell sort//希尔排序是一种对直接插入排序的改进方法,//使用直接插入排序对于一个基本有序的数列进行排序时,内部循环的次数会明显减少,因此可以减小时间复杂度;//希尔排序就是先使数列基本有序,然后再直接插入排序,减小插入排序的时间复杂度;//希尔排序首先按一定增量进行插入排序,再逐步缩减增量,当这一增量缩减至1时,希尔排序变为直接插入排序;//所以这一增量的选取很关键,且这原创 2015-08-24 11:27:32 · 1214 阅读 · 0 评论 -
常见排序算法时间对比
原创 2015-06-16 10:26:18 · 950 阅读 · 0 评论 -
排序算法之归并排序
归并排序原理即将两个有序的数组合并成一个,归并排序有两种方法:递归和循环。/*递归方法*/void Merge(int TR1[], int TR2[], int low, int mid, int high){//将TR2归并入TR1中 int pos1 = low; int pos2 = mid + 1; for (int i = low; i <= high; ++i)原创 2015-06-29 16:46:08 · 847 阅读 · 0 评论 -
排序算法之快速排序
快速排序将以枢轴为界,将原数组分为两个部分,枢轴以前,值都小于枢轴的值,枢轴以后的值都大于枢轴。 采用递归的方法,对以枢轴为界的两个子序列进行快速排序,直至子序列长度为1。 1、快速排序的关键是枢轴的选取,主要有三种方法:1)选取第一个或最后一个作为枢轴值; 2)采用随机数生成器,生成枢轴值的下标;3)取第一个、最后一个、中间三者的中间值作为枢轴值,当数据量比较大的原创 2015-06-30 07:59:34 · 1521 阅读 · 0 评论 -
排序算法之堆排序
堆的定义:1)完全二叉树,2)每个结点的值都大于其左右孩子结点的值。根据堆的定义可知,最大值就是根结点,其次就是根结点左右孩子结点中的一个…… 堆排序有两个很重要的过程:1)建堆,2)堆维护。实质上,这两个过程都可以通过一个函数来实现。void HeapAdjust(SqList* list, int obj, int length){ int tmp = lis原创 2015-06-30 08:41:34 · 934 阅读 · 1 评论 -
排序算法之简单排序
进入找工作倒计时状态了,计划好好复习一下数据结构和相关算法,预计用两天时间把见过的排序算法整理下。 首先参考大话数据结构定义一个链表类:原创 2015-06-29 08:14:54 · 1135 阅读 · 0 评论 -
排序方法比较
原文:http://blog.csdn.net/nomasp/article/details/46380027回顾比较排序相信阅读过前面5篇博文的童鞋们已经发现了“在排序的最终结果中,各元素的次序依赖于它们之间的比较”。于是乎,这类排序算法被统称为”比较排序“。比较排序是通过一个单一且抽象的比较运算(比如“小于等于”)读取列表元素,而这个比较运算则决定了每两个元转载 2015-06-08 10:59:19 · 574 阅读 · 0 评论 -
排序算法合集
排序算法复习大致结束了,主要有以下几种:冒泡排序、选择排序、简单插入排序、希尔排序、归并排序、快速排序、堆排序。#include #define MAXSIZE 1000using namespace std;class SqList{public: SqList():length(0){} SqList(int length1,int value=0):length(le原创 2015-06-30 08:43:37 · 993 阅读 · 0 评论 -
堆排序C++实现
//heap sort//堆排序可以分为两个过程,其一是建堆,其二是出堆//堆是一种完全二叉树,所以它可以用数组进行存储;//堆可分为最大堆和最小堆,最大堆指任一节点的值都大于其左右孩子节点的值,最小堆自不必说;//STL中有一套完整的堆排序算法,其相关函数包括make_heap\push_heap\pop_heap\sort-heap//四个函数都是接受一对迭代器作为参数,其作用分原创 2015-08-24 09:49:31 · 1677 阅读 · 1 评论 -
基数排序C++实现
基数排序介绍基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。 具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。基数排序图文说明基数排序图文说明通过基数排序对数组{53, 3, 54原创 2015-08-24 19:56:38 · 4126 阅读 · 0 评论 -
快速排序算法C++实现
//quick sort//STL中也有现成的快速排序算法,内部实现采用了以下技巧//1)枢轴的选择采取三数取中的方式//2)后半段采取循环的方式实现//3)快速排序与插入排序结合#include#include#includeusing namespace std;//这一版本是最简单实现版本,对于快速排序的优化主要有以下几个方面://1)枢轴的选择,若枢轴选取不全适,比原创 2015-08-23 23:05:42 · 996 阅读 · 0 评论