摘要: 计数排序计数排序不同于前面所有的排序,它并不是一种比较排序。计数排序假设输入元素中每一个都是介于0到k之间的整数,计数排序运行时间是O(n);计数排序的基本思想是:对每一个输入的元素x,统计出小于x的元素个数,然后可以把x直接放到输出数组中。例如有5个元素小于x,那么x就是数组中第6个元素B[5]。 1 void Counting_Sort(int * A, int * B,int n, int k) 2 {//A是原始数组,B用来存数排序后的结果,n是数组长度,k是所有元素范围上限 3 int C[k+1]; 4 for(int i = 0; i < k; i++) 5... 阅读全文
posted @ 2012-11-21 23:02 缓冲区溢出 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 堆排序堆排序是一种原地排序,利用数据结构中的堆来管理数据。(二叉)堆数据结构是一组数组对象,它可以被视为一个完全二叉树,树的每个节点与数组中存放该结点值得那个元素对用。性质:①父节点:i 左孩子::2*i 右孩子:2*i + 1 (注意:在计算机中可以用移位完成,左孩子是i<<1,右孩子是(i<<1) + 1)②二叉堆有两种:最大堆和最小堆,这里以最大堆为例:除了根以外的每个结点i,有A[parent[i]] >= A[i],即每个结点的值最多与其父结点一样大。③当用数组表示存储了n个元素的堆时,叶子结点的下标是[n/2]+1, [n/2]+2,......n。堆 阅读全文
posted @ 2012-11-21 21:51 缓冲区溢出 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 归并排序归并排序,又称为合并排序,它是把待排序序列分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为整体有序序列。使用的D&C的思想:分解:将n个元素分解为各含n/2个元素的子序列;解决:用合并排序法对两个子序列进行递归的排序;合并:合并两个已经排好的子序列以得到正确结果。归并排序的速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。其最好,最坏,平均时间复杂度都是O(nlogn)。 1 void Merge(int A[], int p, int q, int r)//对两个已经排好序的子数列进行合并 2 { 3 int n1 = q -.. 阅读全文
posted @ 2012-11-21 13:23 缓冲区溢出 阅读(516) 评论(0) 推荐(0) 编辑