プロⅡ課題
アルゴの勉強がてらヒープソート作ってみた。
作るのメンドイ方はどうぞ
//ここからソース /* ヒープソート * array[1]〜array[N+1]までの配列をソートする * int型データを昇順に整列しか対応しない */ #define N 100 /*ソートする配列の個数*/ #includeint array[N+1]; /* array[0]は使用しない * めんどくさいのでグローバル変数 */ int heap_sort(void); int down_heap(int left,int right); int main(){ int i,j; for(i = 1,j=N; j;j--,i++) //配列を降順に初期化。本来ランダムのほうがいい array[i] = j; heap_sort(); //ヒープソート開始 for(i = 1;i = 1;i--) { down_heap(i,N); } for(i=N;i>=2;i--) { tmp = array[1]; /* 末尾を先頭に*/ array[1] = array[i]; array[i] = tmp; down_heap(1,i-1); //ヒープの再構成 } return 0; } /*親より子のほうが大きい値だと交換する*/ int down_heap(int left,int right){ int i= left, j, v = array[left]; while(i <= right/2){ j = i * 2; if(j + 1 <= right && array[j] < array[j+1]) //子のうち大きい方をjとする { j++; } if(v >= array[j]) break; //v(つまりa[left])のほうがでかいとその時点で終了 array[i] = array[j]; i = j; } array[i] = v; return 0; } //ここまでソース
int型配列array[1]〜array[N+1]を昇順にしかソートできないので
だいぶしょぼい。気に入らんかったら修正してくれ