クイックソート
Posted: 2008年7月31日(木) 17:25
#include <stdio.h>
#define ARRAY_SIZE (10)
/* プロトタイプ宣言 */
void quick_sort(int array[/url], int begin, int end);
void print_array(int array[/url], int size);
int main(void)
{
int data[ARRAY_SIZE] = { 30, 20, 60, 50, 90, 0, 40, 10, 70, 80 };
print_array( data, ARRAY_SIZE ); /* ソート前の配列を出力 */
quick_sort( data, 0, ARRAY_SIZE-1 ); /* クイックソート実行 */
print_array( data, ARRAY_SIZE ); /* ソート前の配列を出力 */
return 0;
}
/*
昇順になるようにクイックソートを行う。
引数 array:ソート対象の配列。
begin:ソート範囲の先頭の添字。
end:ソート範囲の末尾の添字。
*/
void quick_sort(int array[/url], int begin, int end)
{
int i, j;
int pivot; /* 枢軸 */
int work;
pivot = array[ ( begin + end ) / 2 ]; /* 範囲の中央にある要素を枢軸とする */
i = begin;
j = end;
while( 1 )
{
while( array < pivot ){ ++i; } /* 枢軸以上の値が見つかるまで右方向へ進めていく */
while( array[j] > pivot ){ --j; } /* 枢軸以下の値が見つかるまで左方向へ進めていく */
if( i >= j ){ break; } /* 左右から進めてきたiとjがぶつかったらループを終える */
/* 要素を交換する */
work = array;
array = array[j];
array[j] = work;
}
/* 枢軸の左側に要素が2つ以上あれば、その部分についてクイックソートを再帰させる */
if( begin < i - 1 ){
quick_sort( array, begin, i - 1 );
}
/* 枢軸の右側に要素が2つ以上あれば、その部分についてクイックソートを再帰させる */
if( j + 1 < end ){
quick_sort( array, j + 1, end );
}
}
/*
配列の要素を出力。
引数 array:出力する配列。
size:配列の要素数。
*/
void print_array(int array[/url], int size)
{
int i;
int *p = &array[0];
for( i = 0; i < size; ++i )
{
printf( "%d ", *p );
++p;
}
printf( "\n\n" );
}クイックソートに関しての質問なのですけど自分でいろいろ考えてたのですが
上の if( i >= j ){ break; } なんですが if( i == j ){ break; } でも、いいんですよね。
くだらない質問なんですが答えてもらえると助かります。お願いします。
開発環境はVisual C++です。