Rso's Jotter

日々の開発の知見のメモやその他雑記

プロⅡ課題

アルゴの勉強がてらヒープソート作ってみた。
作るのメンドイ方はどうぞ

//ここからソース

/* ヒープソート
 * array[1]〜array[N+1]までの配列をソートする
 *  int型データを昇順に整列しか対応しない
 */

#define N 100		/*ソートする配列の個数*/
#include 

int 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]を昇順にしかソートできないので
だいぶしょぼい。気に入らんかったら修正してくれ