常见排序算法主要有:插入排序(直接插入排序、希尔排序)选择排序(直接选择排序、堆排序)交换排序(冒泡排序、快速排序)归并排序基数排序外部排序一.直接插入排序算法思想:在一个待排序列中,从第二个元素开始,依次进行排序,每次都将待排序元素从后往前,依次与前面的元素进行比较,从而将带排序元素移动到一个合适...
分类:
其他好文 时间:
2014-05-21 20:03:36
阅读次数:
353
计数排序的基本思想是:统计一个数序列中小于某个元素a的个数为n,则直接把该元素a放到第n+1个位置上。当然当过有几个元素相同时要做适当的调整,因为不能把所有的元素放到同一个位置上。计数排序假设输入的元素都是0到k之间的整数
1 #include 2 void sort(int *A, int *B....
分类:
其他好文 时间:
2014-05-21 18:07:55
阅读次数:
294
第一、任意一个比较排序算法在最好情况下的时间复杂度也是O(nlogN);
第二、计数排序
假设n个输入元素的每一个都是介于0到k之间的整数,计数排序可用,需要临时存储空间O(K),时间复杂度是O(n).
#include
using namespace std;
void countingSort(int *A,int len,int max)
{
if(A==NULL || len<...
分类:
其他好文 时间:
2014-05-14 23:58:58
阅读次数:
382
基数排序思想:分配桶,把待排序的数字按照从低到高的顺序排列。主要有两个过程,分配和收集。
分配时,根据数字的位数,从小到大存放到桶中。 收集时,按照顺序,再覆盖原数组。 重复分配和收集的过程,直到到数字的最高位。 好长时间不写C++代码了。。。
代码如下: #include #inc...
分类:
其他好文 时间:
2014-05-14 13:55:13
阅读次数:
239
前面三篇文章分别介绍了插入排序、选择排序和,今天将最后两个排序讲完,分别是归并排序和基数排序。...
分类:
其他好文 时间:
2014-05-14 01:13:39
阅读次数:
346
桶排序是一种效率很高的排序算法,它的时间复杂度为O(n),但桶排序有一定的限制,只有当待排序序列的元素为0到某一确定取值范围的整数时才适用,典型的例子比如成绩的排序等。
算法思想: 设待排序序列的元素取值范围为0到m,则我们新建一个大小为m+1的临时数组并把初始值都设为0,遍历待排序序列,把待排序序...
分类:
其他好文 时间:
2014-05-13 21:23:40
阅读次数:
351
排序算法有很多,冒泡排序,选择排序,堆排序,快速排序,归并排序,基数排序……其中平均复杂度O(nlogn)的排序算法或者在某方面有特殊优势的算法在ACM中才有实际使用价值,所以上述提到的前2种大家以后就不要用了。其他排序算法大家会慢慢接触,本文主要介绍使用最多的排序函数
sort。大家可能会遇到qs...
分类:
其他好文 时间:
2014-05-12 09:24:26
阅读次数:
323
线性排序的一种(时间复杂度为(n))
计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。
计数排序的特征
当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。
由于用...
分类:
其他好文 时间:
2014-05-09 21:05:32
阅读次数:
309
之前看到一个题目,大概是:有一个长度为n的数组,数组内的元素取值范围为0到m,且不相等,要求元素经过n次移动后使数组有序(即算法的复杂度为O(n))。看到题目后想了快速排序和归并排序发现并不能满足题目要求,直到有次看书有看到了桶排序然后豁然开朗,所以决定把这些排序算法再写一遍,加深记忆。约定:之后的...
分类:
其他好文 时间:
2014-05-09 10:52:49
阅读次数:
333
#include using namespace std;void CountSort(int*
a,int k,int n){ int s = 1; for(int i=0;i=0;i--){ tmp1 = a[i]; tmp2 = a[i] % s;
...
分类:
其他好文 时间:
2014-05-08 22:42:33
阅读次数:
382