ページ 11

【投稿サンプル】クイックソート

Posted: 2011年1月15日(土) 17:38
by みけCAT
クイックソートのプログラムです。
自由に使っていただいてかまいません。
arrにint型の配列を、sizeにarrの要素数を渡します。

コード:

void quicksort(int* arr,int size) {
	int left;
	int right;
	int maeleft;
	int maeright;
	int pipot;
	int temp;
	int lstack[100];
	int rstack[100];
	int stacknum;
	lstack[0]=0;
	rstack[0]=size-1;
	stacknum=0;
	while(stacknum>=0) {
		maeleft=left=lstack[stacknum];
		maeright=right=rstack[stacknum];
		pipot=arr[(left+right)/2];
		while(left<right) {
			for(;left<=maeright && arr[left]<pipot;left++);
			for(;right>=maeleft && arr[right]>pipot;right--);
			if(left<=right) {
				temp=arr[left];
				arr[left]=arr[right];
				arr[right]=temp;
				left++;
				right--;
			}
		}
		stacknum--;
		if(right-maeleft<maeright-left) {
			if(maeleft<right) {
				stacknum++;
				lstack[stacknum]=maeleft;
				rstack[stacknum]=right;
			}
			if(left<maeright) {
				stacknum++;
				lstack[stacknum]=left;
				rstack[stacknum]=maeright;
			}
		} else {
			if(left<maeright) {
				stacknum++;
				lstack[stacknum]=left;
				rstack[stacknum]=maeright;
			}
			if(maeleft<right) {
				stacknum++;
				lstack[stacknum]=maeleft;
				rstack[stacknum]=right;
			}
		}
	}
}