完整原始碼:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 10
void quickSort(int* array, int size);
void quickStep(int* array, int start, int stop);
int quickSortElement(int* array, int start, int stop);
void swapNode(int* array, int index1, int index2);
void printArray(int* array, int size);
void genRandArray(int* array, int size);
int main()
{
int arrayToSort[SIZE] = {0};
genRandArray(arrayToSort, SIZE);
printf("Before Sort:\n");
printArray(arrayToSort, SIZE);
quickSort(arrayToSort, SIZE);
printf("After Sort:\n");
printArray(arrayToSort, SIZE);
}
void quickSort(int* array, int size)
{
quickStep(array, 0, size-1);
}
void quickStep(int* array, int start, int stop)
{
if (stop-start > 0)
{
printf(" quickStep(array, %d, %d)\n", start, stop);
int middle = quickSortElement(array, start, stop);
{
printf(" ");
printArray(array, SIZE);
}
quickStep(array, start, middle-1);
quickStep(array, middle+1, stop);
}
}
int quickSortElement(int* array, int start, int stop)
{
int middle = (stop - start)/2+start;
int pivotValue = array[middle];
swapNode(array, middle, stop);
// move pivot point to end
int storeIntex = start;
for (int i=start; i<=stop; i++)
{
if (array[i] >= pivotValue)
{
swapNode(array, i, storeIntex);
storeIntex++;
}
}
return storeIntex-1;
}
void swapNode(int* array, int index1, int index2)
{
int temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
void printArray(int* array, int size)
{
printf("[");
for(int i=0; i<size; i++)
{
printf(" %d", array[i]);
}
printf(" ]\n");
}
void genRandArray(int* array, int size)
{
srand(time(NULL));
bool isDup = false;
for (int i=0; i<size; i++)
{
do
{
isDup = false;
array[i] = rand()%20+1;
for (int j=0; j<i; j++)
{
if (array[j] == array[i])
{
isDup = true;
}
}
}
while (isDup);
}
}
執行結果(範例):
Before Sort:
[ 18 17 19 12 10 6 13 1 5 7 ]
quickStep(array, 0, 9)
[ 18 17 19 12 13 10 7 1 5 6 ]
quickStep(array, 0, 4)
[ 19 17 13 12 18 10 7 1 5 6 ]
quickStep(array, 1, 4)
[ 19 17 18 13 12 10 7 1 5 6 ]
quickStep(array, 1, 2)
[ 19 18 17 13 12 10 7 1 5 6 ]
quickStep(array, 6, 9)
[ 19 18 17 13 12 10 7 6 5 1 ]
quickStep(array, 6, 8)
[ 19 18 17 13 12 10 7 6 5 1 ]
After Sort:
[ 19 18 17 13 12 10 7 6 5 1 ]