簡單計數排序:
假設待排序的數組a中共有N個整數,並且已知數組a中數據的範圍[0, MAX)。在桶排序時,創建容量爲MAX的數組r,並將數組元素都初始化爲0;。
在排序時,遍歷數組a,將數組a的值,作爲數組r的下標。當a[i]被讀取時,就將r[a[i]]的值加1。例如,讀取到數組a[3]=5,則將r[5]的值+1。
很簡單,
#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int a[25]={1,3,5,7,8,10,12,11,19,8,15,13,12,17,2,4,6,8,9,10,11,19,18,13,12};//25個數,數的範圍都在(0~20);
cout<<"before sort"<<endl;
for(int i=0;i<24;i++)
{
cout<<a[i]<<' ';
}
cout<<a[24]<<endl;
vector<int>b(20);
cout<<"after sort"<<endl;
for(int i=0;i<25;i++)
{
b[a[i]]++;
}
for(int j=0;j<20;j++)
{
while(b[j]>0)
{
cout<<j<<' ';
b[j]=b[j]-1;
}
}
return 0;
}
運行結果: