博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QuickSort快排详细解释
阅读量:6799 次
发布时间:2019-06-26

本文共 962 字,大约阅读时间需要 3 分钟。

hot3.png

快速排序在最差排序速度,平均排序速度,上都十分优秀,经过简单大数据数组测试,快速排序至少比冒泡排序(这一类复杂度为log(n^2)的排序法)快5倍,废话少说,直接上代码上解释

以下是C++代码,大家可以直接拷贝测试一下

//每一次完成一轮遍历(即i=j时),就会产生一个位置(i或j),这个位置就是基数的正确位置,这时基数左边是比它小的书,右边是比它大的数,然后只需要对基数左边的数和右边的数分别递归调用快排就行了

void QuickSort(int*arr,int low,int high)

{

    int i,j;//遍历数

    int temp;//基数

    i=low;//从low开始

    j=high;//到high

    temp=arr[low];//基数

//如果i<j说明遍历还未结束,还有位置没有遍历到,如果i=j代表只剩下一个位置,而这个位置就是基数的正确位置

    while(i<j)

{

        //开始排序

        //从high开始找比基数小的数,替换原本基数的值,这时比基数小的数一个在i处,一个在j处

        while (i<j&&arr[j]>=temp)j--;

        if(i<j)

        {

            //如果temp(基数)>arr[j],将arr[j]这个数赋值给到基数arr[i]。

            arr[i]=arr[j];

            i++;

        }//从i+1开始找比基数大的数,找到后(一定找得到的)放到j处,这样原来重复的数就被替代掉了,而最终重复的数将由基数替换

        while(i<j&&arr[i]<temp)i++;

        if(i<j)

        {

            arr[j]=arr[i];

            j--;

        }

        //如果i<j说明还有没遍历到的位置,so go on

    }

    //此时i=j,该位置就是基数的正确存放位置

    arr[i]=temp;

    //开始子块排序

    if(low<i-1)

        //对基数之前的位置进行快速排序,相同原理

        QuickSort(arr,low,i-1);//从最低值到该基数之前

    if (j+1<high)

        //对基数之后的位置进行快速排序,相同原理

        QuickSort(arr,j+1,high);//从基数之后到最高值

}

手打不易,涂色不易,给个赞呗~

转载于:https://my.oschina.net/zhouzhenBlog/blog/646934

你可能感兴趣的文章
似然函数的概念【转载】
查看>>
认识IPv4分组
查看>>
第七篇、微信小程序-video组件
查看>>
(转)IC验证概述
查看>>
[bzoj1924] 所驼门王的宝藏
查看>>
form表单属性及表单分组
查看>>
<dxwgv:ASPxGridView
查看>>
小程序中通过判断id来删除数据,当数据长度为0时,显示隐藏部分(交流QQ群:604788754)...
查看>>
php把数据转换为json格式
查看>>
Java线程(学习整理)--2---加入另一个线程join
查看>>
replace into 浅析之一
查看>>
软件工程15 个人阅读作业2—提出问题
查看>>
Windows Azure Traffic Manager的新的管理API
查看>>
1.5站立会议之个人
查看>>
remote机制的AdditionalFields
查看>>
MySQL 常用内置函数与所有内置函数
查看>>
bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)
查看>>
Mybatis学习(4)输入映射、输出映射、动态sql
查看>>
java设计模式-策略模式
查看>>
iOS随笔记录
查看>>