第9.6 小节代码 快速排序算法
//This is a comment
//Author:King
//Time:2020/12/6
//Reference:C Programming:A Modern Approach,Second Edition
/***************************************************************
9.6 小节代码 快速排序算法
****************************************************************/
#include <stdio.h>
//#include <stdbool.h> // C99 only
//#include <time.h>
//#include <stdlib.h>
#define N 3
void quicksort(int a[], int low, int high); //函数声明
int split(int a[], int low, int high);
int main(void)
{
int a[N], i;
printf("Enter %d numbers to sort:",N);
for(i = 0; i < N; i++)
scanf("%d",&a[i]);
quicksort(a, 0, N - 1);
printf("In sorted order: ");
for(i = 0; i < N; i++)
printf("%d",a[i]);
printf("\n");
system("pause"); //加入该函数后可以使得产生的exe单独运行,不会发生闪退。也可以加入其它函数使得main函数无法返回即可。如while(1)、getchar() 等
return 0;
}
void quicksort(int a[], int low, int high)
{
int middle;
if(low >= high)
return;
middle = split(a, low, high);
quicksort(a, low, middle - 1); //递归函数
quicksort(a, middle + 1, high);
}
int split(int a[], int low, int high)
{
int part_element = a[low]; //定义数组第一个元素为分割数
for(;;)
{
while(low < high && part_element <= a[high]) //如果分割数小于等于数组最高位元素,那么high--
high--;
if(low >= high)
break;
a[low++] = a[high]; //如果分割数大于数组最高位元素就把数组最高位元素移到最低位,然后把low++
while(low < high && part_element >= a[low])
low++;
if(low >= high)
break;
a[high--] = a[low];
}
a[high] = part_element;
return high;
}