计数排序

    计数排序可以对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 <iostream>
using namespace std;
# include <stdlib.h>
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<<b[i]<<endl;
	system("pause");
	return 0;
}

void fsort(int a[],int b[],int n)    //计数排序
{
	int c[100];    
	int i=0;
	for(i=0;i<100;i++)
		c[i]=0;
	for(i=0;i<n;i++)
		c[a[i]]++;
	for(i=1;i<100;i++)
		c[i]+=c[i-1];    //C[i]存放的是小于或者等于i的元素的个数
	for(i=n-1;i>=0;i--)
	{
	b[c[a[i]]]=a[i];          //将a[i]放到b中合适的位置
	c[a[i]]--;
	}
}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值