#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++です。