首页 > 其他 > 详细

计数排序

时间:2014-03-16 17:15:31      阅读:531      评论:0      收藏:0      [点我收藏+]

    计数排序可以对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]]--;
	}
}


 

 

 

计数排序,布布扣,bubuko.com

计数排序

原文:http://blog.csdn.net/u011608357/article/details/21328735

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!