快速排序法-递归

/*
 ==============================================================================
 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;
}
  1. 将问题分割为性质相同、规模变小的多个问题,不关心具体实现;

  2. 针对具体一个问题思考解决办法,如此递归;

http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F#C

Tags: c语言 排序 数组
Time: 1371007511720