クイックソートについて
下記のソースプログラムのquick_sort_coreの部分がわかりません。
わかる方助けてください。
あとこのソースを降順にした場合の変更点も教えていただけると助かります。
#include <stdio.h> /* printf()利用のため */
#include <stdlib.h> /* rand()利用のため */
#include <time.h> /* clock()利用のため */
#define N 10 /* 整列対象要素数 */
/**
* 配列の中身を表示する関数
* @param a 表示する配列
* @param n 配列の要素数
*/
void
print_array(const int a[], int n)
{
int i;
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
/**
* 整列されているかどうか確認する関数
* @param a 確認対象配列
* @param n 配列の要素数
*/
void
is_sorted(const int a[], int n)
{
int i;
for (i = 0; i < n - 1; i++) {
if (a[i] > a[i + 1]) {
printf("昇順に整列されていません\n");
return;
}
}
printf("昇順に整列されています\n");
}
/**
* クイックソートの本体
* @param a 整列対象配列
* @param l 対象の最初の要素番号
* @param r 対象の最後の要素番号
*/
void
quick_sort_core(int a[], int l, int r)
{
/* ここを実装する */
}
/**
* これまでの整列関数のインターフェースにあわせるクイックソート呼び出し関数
* @param a 整列対象配列
* @param n 配列の要素数
*/
void
quick_sort(int a[], int n) {
quick_sort_core(a, 0, n - 1);
}
int
main(void)
{
int i;
int n = N; /* 整列対象要素数 */
int a[N];
clock_t start,end;
/* 0からRAND_MAXの一様乱数をn個生成し、配列aに格納 */
for (i = 0; i < n; i++) {
a[i] = rand();
/* 出力確認(print_array)するときは a[i]=rand()%100 としておくと見やすい */
}
/* 昇順にソートされているか確認(デバッグ用) */
is_sorted(a, n);
/* 配列の中身を確認(デバッグ用) */
print_array(a, n);
/* 開始時刻の取得 */
start = clock();
/* クイックソート関数の呼び出し */
quick_sort(a, n);
/* 終了時刻の取得 */
end = clock();
/* 配列の中身を確認(デバッグ用) */
print_array(a, n);
/* 昇順にソートされているか確認(デバッグ用) */
is_sorted(a, n);
/* 実行時間の表示 */
printf("%d 個の要素のクイックソートの実行に %f [秒]かかりました\n", n, (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}