快速排序

快速排序算法:

1、先从数列中取随机取一个数作为基准数(一般取数列的第一个数)

2、分区过程,将比这个基准数大的数全放到它的右边,小于或等于它的数全放到它的左边

3、再对左右区间重复第二步,直到各区间只有一个数

快速排序图解

下面以数列{14,15,30,28,5,10}为例,演示它的快速排序过程(如下图)

分析第一趟排序:

首先选第一个数作为基准数,i = 0, j = n;

从j开始,由后往前找比基准数小的数:若找到,则a[i]=a[j];i++,从i开始往后找,找比基准数大的数,找到a[j]= a[i],直到i=j循环结束,不然重复以上步骤

源代码

int FindPos(int arr[], int low, int high)
{
    int key = arr[low];
    while(low < high)
    {
        while(low < high && arr[high] >= key)
            high--;
        arr[low] = arr[high];
        while(low < high && arr[low] <= key)
            low--;
        arr[high] = arr[low];
    }
    arr[low] = key;
    return low;
}

int quick_sort(int arr[], int low, int high)
{
    if(low > high)
        return 0;
    int pos = FindPos(arr, low, high);
    quick_sort(arr, low, pos-1);
    quick_sort(arr, pos + 1, high);
    return 1;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值