上の方針で書いたのが次のプログラムです. クイックソートは その形から再帰的なプログラムになるので, quicksort と 言う名前の函数を用意します. 函数に配列を引数で渡しますが, この例の様に配列名で渡します. この詳しい仕組みを知りたい方は, 後期の 授業を受けるか, 自習するかして下さい.
/* File name 13-2.c */
#include <stdio.h>
#define SIZE 20
int data[SIZE]= {99,73,20,32,34,5,64,97,25,12,83,9,21,40,3,44,69,15,58,75};
void quicksort(int list[], int left, int right);
main()
{
int i;
quicksort(data, 0, SIZE-1);
for (i=0; i<SIZE; i++)
printf("%d ", data[i]);
printf("\n");
}
void quicksort(int list[], int left, int right)
{
int i, last;
int temp;
if (left >= right)
return;
last = left;
for (i=left+1; i <= right; i++){
if (list[i] < list[left] ){
last++;
temp=list[last];
list[last]=list[i];
list[i]=temp;
}
}
temp=list[left];
list[left]=list[last];
list[last]=temp;
quicksort(list, left, last-1);
quicksort(list, last+1, right);
}