# 2 ** 源文件: count_sort_test.cpp **计数排序(算法) * 比较计数法 * 分布计数法 ** Just test for these function here. ** 详见代码逻辑。 ** 作者:junkun huang ** 日期:2012-06-26 / */ 算法 ComparisonCountingSort(A[0 ... n-1] // 用比较计数法对数组排序 // 输入:可排序数组 A[0 ... n-1] // 输出:将A中元素按照升序排列的数组 S[0 ... n-1] for i : 0 to n-1 do Count[i] = 0; for i : 0 to n-2 do for j : i+1 to n-1 do if A[i] < A[j] Count[j] += 1; else Count[i] += 1; for i : 0 to n-1 do S[Count[i]] = A[i]; return S; DistributionCountingSort(A[0 ... n-1, l, u] // 用分布计数法对数组排序,对来自于有限范围整数的一个数组进行排序 // 输入:可排序数组 A[0 ... n-1 ],数组中的整数位于l和u之间( l <= u) // 输出:将A中元素按照升序排列的数组 S[0 ... n-1] for i : 0 to u-l do D[i] = 0; // 初始化频率数组 for i : 0 to n-1 do D[A[i] - l] = D[A[i] - l] + 1; // 计算频率值 for i : 1 to u-l do D[i] = D[i-1] + D[i]; // 重用于分布值 for i : n-1 downto 0 do j = A[i] - l; S[D[j] - 1] = A[i]; // D[j] - 1]为对应的数组下标 D[j] -= 1; return S; === # 1 /** ** project name: sort-and-find ** date: 2008-11 ** author: junkun huang ** e-mail: huangjunkun@gmail.com ** declare: 目录存放大学时期,学习数据结构(算法)时做实验题目的代码,代码非工程性,用于学习和测试,仅包括排序与查找算法。 源文件简要说明,如下: ** 源文件: main.cpp main.h sort_find.h stdafx.h # 排序算法: 冒泡排序 -- BubbleSort 选择排序 -- SelectSort 快速排序 -- QuickSort 归并排序 -- MergeSort -- MergeSort2 插入排序 -- InsertSort(简单插入排序) -- BInsertSort(折半插入排序) -- P2InsertSort(2路插入排序) 堆排序 -- HeapSort 希尔排序 -- ShellSort 基数排序 -- test_distribution_sort(演示) ## 时间复杂度 冒泡排序 O(n2) 插入排序 O(n2) 选择排序 O(n2) 归并排序 O(n log n) 堆排序 O(n log n) 快速排序 O(n log n) 希尔排序 O(n1.25) 基数排序 O(n) 排序算法详细说明参见:http://zh.wikipedia.org/zh/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95 查找算法 顺序查找 -- SequentialFind 折半查找 -- BinaryFind 插值查找 -- InterpolationFind 注意:折半与插值查找,适用于针对有序集合的查找。 � **/