快速排序中的划分算法——数据结构

排序在数据结构中是很重要的一个部分,而快排有时我们使用最频繁的排序算法,划分算法又是快排中的精髓,下面就介绍如何写快速排序算法中的划分算法

首先给出一组数据,在给出在数组中的最低位(low)和最高位(high),并且将数组的0号位置作为监视哨使用,用来存放当前要划分的数字,然后以这个数字为基准进行划分,当在low<high的时候,先从low端比较,low端的数据应该比R[0]小,当发现比R[0]大的数据时,将这个数据付给R[high],然后从high端进行比较,当发现比R[0]小的数据时,将R[high]付给R[low],然后重复上述过程直到退出循环为止,最后将R[0]的值付给R[high]或者R[low],因为在退出循环的时候,high和low相等,此时high或low的位置就是R[0]最后存放的位置,这一趟划分就结束了。代码如下:

#include <stdio.h>
#include <stdlib.h>
int divide(int R[],int low,int high)
{
    R[0]=R[low];
    while(low<high)
    {
        while(low<high&&R[low]<=R[0])
          low++;   
          if(low<high)
          {
              R[high]=R[low];
              high--;
          }
          while(low<high&&R[high]>R[0])
            high--;
            if(low<high)
            {
               R[low]=R[high];
               low++;
            }
    }
    R[low]=R[0];
    return low;
}
int main()
{
    
    return 0;
}

而快速排序就是在多次重复的进行划分算法,此算法的时间复杂度为O(nlog2n),空间复杂度为(log2n),因为是递归的执行用到堆栈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值