バケットソートの実装。
maxはソートする値の中で最大の値。
valueはソートのリスト。
普通にintの配列を使っても良かったが、ちょっとメモリを節約するように作った。
むしろビット演算の練習。
boolでやるなら16を8にintでやるなら16を32にする。
#include <iostream>
using namespace std;
void bit_on(unsigned short *a, int i){
a[i/16] |= (1<<(i%16));
}
void bucket_sort(unsigned short *a, int *value, int v_size){
for (int i=0; i<v_size; i++)
bit_on(a, value[i]);
}
void print_value(unsigned short *a, int size){
int k=0;
for (int i=0; i<size; i++){
for (int j=0; j<16; j++){
if(a[i]&1)
cout << k << endl;
k++;
a[i] >>= 1;
}
}
}
int main(){
int max = 100;
int size = max/16+1;
int value[] = {10, 50, 80, 60};
int v_size = 4;
unsigned short a[size];
for (int i=0; i<size; i++) // initialize
a[i] = 0;
bucket_sort(a, value, v_size);
print_value(a, size); // print sorted list
}
最終更新:2010年03月04日 04:31