快速排序,原理说明简洁易懂,附c代码实现,

快排是排序中比较实用的一种算法;

快排的原理就是:(以从排序数组arr[N]为例)

1、先找到数组中的一个元素作为锚定点(假设为数组中的第一个元素arr[0])

2、遍历数组将小于锚定点的数(假设k个点)放在数组的前面,将这些数交换至arr[1]~arr[k];

3、交换锚定点arr[0]和arr[k],此时arr[k]位置处的值就是最初设定的锚定点(arr[0]),arr[k]前面的数都比它小,后面的数都比它大;

4、然后对数组 [ arr[0],arr[k-1] ),( arr[k+1],arr[N] ] 这两个数组再进行上述的递归操作

5、一直递归到左元素下标大于等于右元素下标,排序停止

C语言实现如下;

//c语言核心代码如下;
void qsort(int v[],int left,int right)
{
    int i,pos;
    if (left >= right)
        return;
    //取第一个元素为锚定点
    pos = left;
    //遍历数组,将小于锚定点的数swap到数组前部
    for (i=left+1;i<=right;++i) {
    	if (v[i]<v[left])
            swap(v,i,++pos);
    }
    //将锚定点的数与swap至其正确位置pos;
    swap(v,left,pos);
    //递归该过程
    qsort(v,left,pos-1);
    qsort(v,pos+1,right);
}

//其中swap为交换一个数组中下标为i和j的函数;
void swap(int v[],int i,int j)
{
    int temp;
    temp = v[i];
    v[i] = v[j];
    v[j] = temp; 
}

//
int main()
{
    int arr[10] = {7,1,3,9,2,6,1,7,3,5};
    qsort(arr,0,9);
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ah_yl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值