/sort-and-find

learn-sort-and-find

Primary LanguageC


# 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
	注意:折半与插值查找,适用于针对有序集合的查找。
	�
**/