(15)内部排序C++源码
摘要:内部排序,还有一个基数排序,基数排序也是比较常用的。有时间再好好研究一下,先把排序源代码上传。http://files.cnblogs.com/wanggary/SortPlusPlus.zip
阅读全文
posted @
2011-05-12 21:16
星晨_jqren
阅读(1215)
推荐(0)
(14)归并排序之二 2-路归并排序非递归形式
摘要:那么在递归形式的2-路归并排序中,会不停的申请容量为count的int数组,在递归调用中会占用大量的存储空间。为了节省存储空间的开销,可以考虑非递归的形式。// 归并排序之非递归void CMergingSort::MergeSort(void){ const int count = 9; int A[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49}; int step = 1; int B[count] = {0}; //决定趟数 while (step < count) { MergePass(A, B, step, count);//#1 s
阅读全文
posted @
2011-05-09 22:12
星晨_jqren
阅读(1765)
推荐(0)
(13)归并排序之一 2-路归并排序递归形式
摘要:归并排序(MergingSort),是又一类不同的排序方法。“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。时间复杂度为O(nlog2n)。const int count = 9;// 2-路归并排序之递归形式void CMergingSort::Path2MergingSort(void){ int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49}; MSort(L, L, 1, count - 1); //打印排序结果。 for (int i = 0; i < count; ++ i) { cout << L[i]
阅读全文
posted @
2011-05-06 23:09
星晨_jqren
阅读(980)
推荐(0)
(12)选择排序之三 堆排序
摘要:堆排序(HeapSort),只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。堆的定义如下:n个元素的序列{k1, k2, … , kn}当且仅当满足下关系时,称之为堆。Ki<= K2i && Ki <= K2i+1 或Ki >= K2i && Ki >= K2i+1,(i =1, 2, … , n/2」)。若将和此序列对应的一维数组看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。理解:若在输
阅读全文
posted @
2011-05-04 20:51
星晨_jqren
阅读(854)
推荐(0)
(11)选择排序之二 树形选择排序
摘要:树形选择排序(Tree Selection Sort),又称锦标赛排序(Tournament Sort),是一种按锦标赛的思想进行选择排序的方法。时间复杂度为O(nlog2n)。理解:两两比较,选出第一个最小值,将原来的叶子节点设置为∞,进行同样的两两比较,既可选出第二个最小值,如此往复。缺点:占用的辅助存储空间较多,和“∞”进行多余的比较等。为了弥补这些缺点J.willioms提出了另一种形式的选择排序——堆排序。 首先将待排序记录两两分组,将每组的最小值设置为他们的父结点,把所有这些筛选出来的父结点再两两分组,选出每组的最小值并设置为这组的父结点。一层一层筛选,直到选出根结点,就是最小值.
阅读全文
posted @
2011-05-04 20:20
星晨_jqren
阅读(2634)
推荐(0)
(10)选择排序之一 简单选择排序
摘要:简单选择排序(SimpleSelection Sort),一趟简单选择排序的操作为:通过n - i 次关键字间的比较,从n - i + 1个记录中选出关键字最小的记录,并和第i(1 <= i <= n)个记录交换之。时间复杂度为O(n^2)。// 简单选择排序void CSelectionSort::SimpleSelectionSort(void){ const int count = 9; int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49}; for (int i = 0; i < count; ++i) { int j
阅读全文
posted @
2011-05-02 22:52
星晨_jqren
阅读(826)
推荐(0)
(9)交换排序之二 快速排序
摘要:快速排序(QuickSort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。// 快速排序void CExchangeSort::QuickSort(void){ const int count = 9, length = count -1; int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49}; int low = 1; int high = length; QuickSort(L, low, hig.
阅读全文
posted @
2011-05-01 22:12
星晨_jqren
阅读(905)
推荐(0)