现在的位置: 首页 > 综合 > 正文

【算法】计数排序

2018年02月17日 ⁄ 综合 ⁄ 共 646字 ⁄ 字号 评论关闭

计数排序是一种线性时间排序方法,在以下条件满足时对n个数的数组A[]进行排序,其时间为O(n):

一:数组A[]中的元素的大小均小于k

二:k=O(n)


算法代码如下:


#include <stdio.h>
#include <stdlib.h>
/**
 * 计数排序
 * a[] (input)要排序的数组
 * b[] (output) 排序结果
 * n	(input) 排序的数字的个数
 * k	(input)对所有的i满足:a[i]<k
 */
void count_sort(int a[],int b[],int n,int k)
{
	int i = 0;
	int* c = (int*)malloc(sizeof(int)*k);
	//初始化
	for(i = 0 ; i < k; i++)
	{
		*(c+i) = 0;
	}

	//计算各个元素的个数
	for( i = 0; i < n; i++)
	{
		(*(c+a[i]))++;
	}
	for(i = 1; i < k; i++)
	{
	    *(c+i) += *(c+i-1);
	}
	//输出
	for(i = n-1; i >= 0; i--)
	{
		b[*(c+a[i])-1] = a[i];
		(*(c+a[i]))--;
	} 
	free(c);
}


int main()
{
	int i;
	int a[] = {3,4,4,5,3,3,2,4,12,6,8};
	int length = sizeof(a)/sizeof(a[0]);
	int* b = (int*)malloc(sizeof(int)*length);
	count_sort(a,b,length,47);
	for(i = 0; i < length; i++)
		printf("%d\t",b[i]);	

}

 

抱歉!评论已关闭.