排序算法——快速排序

一、C 程序实现

/*******************************************************
* Description: 快速排序算法
* Author: shujuxiong
* Version: 1.0
* Time: 2018-06-26
*******************************************************/

#include <stdio.h>

//函数:打印数组
void PrintDataArray(int a[], int n)
{
    for(int i=0; i<n; i++)
        printf("%d ",a[i]);
    printf("\n");
}

//快速排序
void QuickSort(int a[], int left, int right)
{
    //如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了
    if(left >= right)
        return ;

    int i = left;
    int j = right;
    int tmp = a[i];
    while(i < j)
    {
        //从右向左找小于基准值a[i]的元素
        while(i<j && a[j]>=tmp)
            j--;    //向前寻找
        a[i] = a[j];    //挖出此数a[j]填到前一个坑a[i]中

        //从左向右找大于基准值a[i]的元素
        while(i<j && a[i]<=tmp)
            i++;    //向后寻找
        a[j] = a[i];    //挖出此数填到前一个坑a[j]中
    }
    //将基准值填入最后的坑中
    a[i] = tmp;
    //递归调用,分治法的思想
    QuickSort(a, left, i-1);
    QuickSort(a, i+1, right);
}


//测试用例
int main()
{
    int a[] = {3,1,7,5,2,4,9,6};
    int len = sizeof(a)/sizeof(a[0]);
    QuickSort(a, 0, len);
    PrintDataArray(a, len);

    return 0;
}

 运行结果:

猜你喜欢

转载自www.cnblogs.com/shujuxiong/p/9227252.html