您的位置:首页 > 其它

每日一算法之计数排序

2014-04-01 17:55 204 查看

计数排序的基本思想是:对输入序列的每一个元素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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息