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

みんなが作った便利な関数やサンプルを共有するコミュニティです。
[url]http://www.activebasic.com/forum/viewforum.php?f=2]ActiveBasicの「実践コードモジュール」[/url]的な感じでやりましょう。
フォーラム(掲示板)ルール
・投稿するコードはできるだけ一つ、もしくは一つの関数を補助する複数の関数の形式にするか、
それだけをコンパイルして動くソースコード一式の形にしてください。
記事には説明だけを書き、コードは添付ファイルにしてもかまいません。
・使い方などの説明も書いてください。
環境に依存するコードの場合は、対象の環境も書いてください。
・使用条件(ライセンスなど)も書いていただけるとありがたいです。
・C言語、もしくはC++推奨ですが、他の言語でもかまいません。
・コードは正しくcodeタグで囲みましょう。
・一つのスレッドで一つのサンプルが基本です。
関連するサンプルの場合はまとめてもかまいません。
・投稿したサンプルを修正する場合には、スレッドの返信の形で投稿してください。
(新しいスレッドにしないでください。記事の編集でもかまいません)
返信
アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#1

投稿記事 by みけCAT » 13年前

クイックソートのプログラムです。
自由に使っていただいてかまいません。
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;
			}
		}
	}
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“サンプルを共有するコミュニティ” へ戻る