/*
==============================================================================
Name: 快速排序法-递归
Desc: 设定数组中一个元素下标为i值为e,使得0~(i-1)均小于e,i+1~n均大于e,依次递归
=============================================================================
*/
#include <stdio.h>
#define N 10
void quicksort(int a[], int low, int high);
int split(int a[], int low, int high);
int main(void)
{
int a[N], i;
printf("Please enter number to quicksort(lt<%d): \n", N);
for(i = 0; i < N; i++){
scanf("%d", &a[i]);
}
quicksort(a, 0, N - 1);
for (i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
void quicksort(int a[], int low, int high)
{
int middle_idx;
if (low >= high) return;
middle_idx = split(a, low, high);
quicksort(a, low, middle_idx - 1);
quicksort(a, middle_idx+1, high);
}
int split(int a[], int low, int high)
{
int part_element = a[low];
for(;;){
/* step 1 */
while(low < high && part_element <= a[high]) {
high--;
}
if (low >= high) break;
a[low++] = a[high];
/* step 2 */
while(low < high && part_element >= a[low]) {
low++;
}
if (low >= high) break;
a[high--] = a[low];
}
a[high] = part_element;
return high;
}
将问题分割为性质相同、规模变小的多个问题,不关心具体实现;
针对具体一个问题思考解决办法,如此递归;
http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F#C