计数排序

    计数排序可以对0k区间的整数进行排序,K为整数,排序的时间复杂度为O(n+k),它不是基于比较的算法,时间复杂度低于任何基于比较的排序算法。计数排序是稳定的排序。它的基本思想是对每一个输入元素x,输入小于x的元素个数,利用这一信息,可以直接把x放到它在输出数组中的位置上。在计数排序算法的代码中,假设输入是一个数组A[1…n],A.length=n,还需要两个数组,B[1…n]存放排序的输出,C[0…k]提供临时存储空间。

《算法导论》中给出了计数排序的算法伪代码:

COUNTSORT(A,B,k)

let C[0..k]be a new array

for i=0 to k

         C[i]=0

for j=1 to A.length

         C[A[j]]=C[A[j]]+1

//C[i]now contains the number of elements equal to i

for i=1 to k

         C[i]=C[i]+C[i-1]

//C[i] now contains the number of elements less than or equal to i

for j=A.length downto 1

B[C[A[j]]]=A[j]

C[A[j]]=C[A[j]]-1

 计数排序的代码为(数组待排序的数字在099之间):

# include 
using namespace std;
# include 
int main()
{
	void fsort(int a[],int b[],int n);
	int a[10]={15,54,40,69,91,3,7,9,10,45};
	int b[100];
	int i;
	fsort(a,b,10);
	for(i=1;i<=10;i++)
		cout<=0;i--)
	{
	b[c[a[i]]]=a[i];          //将a[i]放到b中合适的位置
	c[a[i]]--;
	}
}


 

 

 

你可能感兴趣的:(算法)