计数排序的基本思想是:对输入序列的每一个元素X,确定小于X的元素的个数,这样就可以直接把X放到相应的位置了。需要特殊注意的地方就是有元素相同时
。因为不能把相同元素放到同一位置。上代码:
// CountSort
//
// Created by zhaowei on 14-4-1.
// Copyright (c) 2014年 zhaowei. All rights reserved.
// 计数排序的输入序列在区间(0,k)。计数排序是稳定的
#include <iostream>
using namespace std;
void countSort(int *a,int *b,int k,int len){//a[0]不参加排序
int *c = new int[k];
for (int j = 1; j<len; j++)
c[a[j]]+=1;
for (int i = 1; i<k; i++)
c[i] = c[i]+c[i-1];
for (int j = len-1; j>0; j--) {
b[c[a[j]]] = a[j];
c[a[j]]-=1;
}
}
int main(int argc, const char * argv[])
{
// insert code here...
int a[10] = {0,2,4,3,5,7,4,9,8,6};
int b[10];
for(int i = 1;i<10;i++) cout<<a[i]<<" ";
cout<<endl;
countSort(a, b, 10, 10);
for(int i = 1;i<10;i++) cout<<b[i]<<" ";
cout<<endl;
return 0;
}