计数排序(CountingSort)的实现
2009-11-10 00:43
465 查看
CountingSort是一种典型的以空间换时间的排序算法~ 因此它的复杂度可以达到线性关系,而且计数排序是一种稳定的排序算法~但是不足之处是它只能用于整数的排序~
主要的思想可以通过下面的伪代来了解:
for i←1 to k
doC[i] ←0
for j←1 to n
doC[A[j]] ←C[A[j]] + 1 ⊳C[i] = |{key = i}|
for i←2 to k
doC[i] ←C[i] + C[i–1] ⊳C[i] = |{key ≤i}|
for j←n down to1
doB[C[A[j]]] ←A[j]
C[A[j]] ←C[A[j]] –1
其实算法实现并不难,主要把数组下标注意到就可以了~
下面是它的java实现代码:
//只用于整数排序;
public class CountingSort{
public void CountingSort(int []L)
{
int n=L.length; //L数组的大小;
//获得数组L中的最大的数;
int k=0; //C数组的大小;
for(int i=0;i<n;i++)
{
if(k<L[i])
k=L[i];
}
int C[]=new int[k];
for(int i=0;i<k;i++)
C[i]=0;
for(int i=0;i<n;i++)
C[L[i]-1]=C[L[i]-1]+1;
for(int i=1;i<k;i++)
C[i]=C[i]+C[i-1];
int B[]=new int
;
for(int i=n-1;i>=0;i--)
{
B[C[L[i]-1]-1]=L[i];
C[L[i]-1]=C[L[i]-1]-1;
}
for(int i=0;i<n;i++)
L[i]=B[i];
}
public static void main(String []args){
int A[]={10,2,3,2,5,7,5,3,4};
CountingSort Test=new CountingSort();
Test.CountingSort(A);
for(int i=0;i<A.length;i++)
System.out.println(A[i]);
}
}
Output:
--------------------Configuration: <Default>--------------------
2
2
3
3
4
5
5
7
10
Process completed.
主要的思想可以通过下面的伪代来了解:
for i←1 to k
doC[i] ←0
for j←1 to n
doC[A[j]] ←C[A[j]] + 1 ⊳C[i] = |{key = i}|
for i←2 to k
doC[i] ←C[i] + C[i–1] ⊳C[i] = |{key ≤i}|
for j←n down to1
doB[C[A[j]]] ←A[j]
C[A[j]] ←C[A[j]] –1
其实算法实现并不难,主要把数组下标注意到就可以了~
下面是它的java实现代码:
//只用于整数排序;
public class CountingSort{
public void CountingSort(int []L)
{
int n=L.length; //L数组的大小;
//获得数组L中的最大的数;
int k=0; //C数组的大小;
for(int i=0;i<n;i++)
{
if(k<L[i])
k=L[i];
}
int C[]=new int[k];
for(int i=0;i<k;i++)
C[i]=0;
for(int i=0;i<n;i++)
C[L[i]-1]=C[L[i]-1]+1;
for(int i=1;i<k;i++)
C[i]=C[i]+C[i-1];
int B[]=new int
;
for(int i=n-1;i>=0;i--)
{
B[C[L[i]-1]-1]=L[i];
C[L[i]-1]=C[L[i]-1]-1;
}
for(int i=0;i<n;i++)
L[i]=B[i];
}
public static void main(String []args){
int A[]={10,2,3,2,5,7,5,3,4};
CountingSort Test=new CountingSort();
Test.CountingSort(A);
for(int i=0;i<A.length;i++)
System.out.println(A[i]);
}
}
Output:
--------------------Configuration: <Default>--------------------
2
2
3
3
4
5
5
7
10
Process completed.
相关文章推荐
- 算法数据结构C++实现4-计数排序(counting sort)
- 计数排序(Counting Sort)
- 【算法导论学习-014】计数排序(CountingSortTest)
- 计数排序(Counting Sort)
- 计数排序(Counting Sort)
- 计数排序(Countsort)之Java实现
- 计数排序(Countsort)之Java实现
- java计数排序(counting sort)
- counting sort 计数排序
- 无聊写排序之 ---- 计数排序(CountingSort)
- 算法总结系列之三 : 计数排序(CountingSort)
- 计数排序(Counting Sort)
- 排序和查找-计数排序(Counting Sort)
- 线性排序:计数排序 Counting Sort 和 基数排序 Radix Sort
- 排序算法系列:计数排序(Counting sort)(C语言)
- Counting sort-计数排序算法之Java实现
- 计数排序(Counting Sort)与比特计数排序(Bit Counting Sort)
- 【CLRS】《算法导论》读书笔记(三):计数排序(Counting sort)、基数排序(Radix sort)和桶排序(Bucket sort)
- 算法导论 第八章计数排序(counting sort)
- radix sort 基数排序 和 counting sort 计数排序