快速排序

基本思想:第一趟取一个基点,然后把序列分成两部分,小于基点和大于基点,每一部分再递归调用快速排序。不稳定。

//
//  QuickSort.c
//  libin
//
//  Created by 李宾 on 16/5/9.
//  Copyright © 2016年 李宾. All rights reserved.
//

#include <stdio.h>
#define SWAP(a, b) { int temp; temp = a; a = b; b = temp;}
void Quick_Sort(int *p , int left, int right)
{
    int left_index = left;
    int right_index = right;
    int pivot = p[(left_index + right_index)/2];
    while (left_index <= right_index) {
        while (p[left_index] < pivot) {
            left_index ++;
        }
        while (p[right_index] > pivot) {
            right_index --;
        }
        if (left_index <= right_index) {//相等时候也要交换并加加减减,否则一直递归,栈溢出
            SWAP(p[left_index], p[right_index]);
            left_index ++;
            right_index --;
        }
    }
    if(left_index < right )
    {
        Quick_Sort(p, left_index, right);
    }
    if(right_index > left )
    {
       Quick_Sort(p, left, right_index);
    }
    
}

int main()
{
    int a[5] = { 10 , 4, 13, 6, 29 };
    Quick_Sort(a, 0, 4);
    for (int i = 0; i < 5; i ++) {
        printf("%d	", a[i]);
    }
    printf("
");
}
原文地址:https://www.cnblogs.com/masterlibin/p/5473611.html