C++でバケットソート

バケットソートの実装。
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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。