数据结构与算法(二十一)快速排序

1、快速排序算法

快速排序(Quick Sort)的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。

基本实现思路:快速排序算法每一趟排序都需要一个基准数,一般以待排序的序列最左边的第一个数值为基准数,然后设置两个哨兵在待排序的序列的两端,左哨兵往右寻找比基准数大的数值,右哨兵往左寻找比基准数小的数值,各找到一个后就交换,一直到左哨兵和右哨兵为止,左哨兵和右哨兵相遇的位置就基准数该在的位置,交换基准数和左哨兵,然后递归排序基准数左半部分的序列,递归排序基准数右半部分的序列。

/*快速排序递归算法*/
void Quick_Sort(int *arr, int left,int right)
{
    if (left >= right) return;             /*左与右相遇,说明已经排序完成,返回*/
	
    int pivot = partition(arr, left, right); /*排序后,得到枢轴的位置*/
    Quick_Sort(arr, left, pivot-1);        /*以枢轴划分,递归排序左半部分*/
    Quick_Sort(arr, pivot+1, right);       /*以枢轴划分,递归排序右半部分*/
}

/*一趟排序后,返回枢轴的位置*/
int partition(int *arr, int left,int right)
{                         /*一般以序列最左边的第一个数为基准数*/
    int pivot = left;     /*枢轴记录基准数的位置*/
    while (left < right)  /*直到左、右哨兵相遇,完成排序*/
    {
        /*右哨兵先左移,直到找到小于基准数的,或遇到左哨兵时停下*/
        while (left < right && arr[right] >= arr[pivot])
            right--;
        /*然后左哨兵右移,直到找到大于基准数的,或遇到右哨兵时停下*/
        while (left < right && arr[left] <= arr[pivot])
            left++;
        /*此时右哨兵指向小于基准数的,左哨兵指向大于基准数的,交换它们*/
        swap_arr(arr,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值