排序算法之快速排序

快速排序
首先我们来看看百度百科上是怎么说快速排序的:

快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

简单的来说,就是先确定一个key,然后分别把比key大和比key小的数分配到两边,然后递归求解,这样得到的结果一定是一个有序列。

看图理解快一点

假设一开始的序列是这样的,我们假设要排成一个递增序列,我一般都是取中间的值为key值
在这里插入图片描述我们分别在key的左边和右边的序列分别设立两个指针指向头尾。

然后我们分别判断它们与key值的大小,如果beg对应的值小于key则将执行beg++,对右边的序列也一样,像是上面的图,我们不需要移动beg和end指针。然后我们交换beg和end对应的值,就有了下图

在这里插入图片描述
重复上一过程直到beg不小于end,然后递归key的左右两边的序列,如下图

在这里插入图片描述
重复刚才说的,下面就不多说了

在这里插入图片描述

在这里插入图片描述
这样我们就排序好了,原理懂了代码就简单了

void QuickSort(int arr[],int low, int high)
{
    int temp;
    int beg = low;
    int end = high;
    int mid = arr[(low + high) / 2];
    do
    {
        while (arr[beg] < mid) //查找左半部分比mid大的数
        {
            beg++;
        }
        while (arr[end] > mid) //查找右半部分比mid小的数
        {
            end--;
        }
        if (beg <= end)
        {
            swap(arr[beg], arr[end]);
            beg++;
            end--;
        }
    } while (beg <= end);
    if (low < end)
    {
        QuickSort(arr,low, end);
    }
    if (beg < high)
    {
        QuickSort(arr,beg, high);
    }
}

这是我的第三篇博客了,如果有不足的地方请指出来便于我改进

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值