常见排序算法--快速排序

16 篇文章 0 订阅
15 篇文章 0 订阅
常见排序算法–快速排序
算法思想:以数组中第一个点为分界点,数组中比它小的所有结点就排在它的左边,比它大的所有结点排在它的右边;然后将左边数组,右边数组看成一个整体分别按照这种规则进行排序,直达所有结点排序完成。下面我结合实际例子进行解释
假设初始数组为{5,2,7,9,1},第一步取数组第一个点5与数组最右边的数比较,如果最右边的数字比5大,就依次遍历这个最右边数字左边的数,直到找到比这个数小的数,按照上面数组最右边数字1比5小,接下来把数字1复制到数字5的位子,(此时数字1的位置空了)接下来从左到右比较,直到找到一个数(数字7)比数字5大,把数字7复制到空了的位置,然后按照上述规则比较,直到两边比较的数字标号重合,完成一遍排序。
初始状态52791
第一步1279
第二步1297
第三步12597
这样,小于数字5的全放在了左边,大于数字5的全放在了右边
接下来按照这种规则将数组{1,2,},{9,7}进行排序,
。。。。。。
最后得到排列1,2,5,7,9
左边数组12右边数组97
排序后127
排序后1279
代码如下
//首先以数组的第一个为基本比照点,先与最右边的比较,直到找到一个比它小的数位置j,然后这个小的数就跳到基本点的i位置,接下来以基本点以右进行比较,直到发现比这个基本点的数大的,将这个数跳到j的位置上,然后从j开始。。。直到j和i重合,停止跳动,一趟遍历就做好了
void pai(int a[],int low,int high)
{
    int i=low,j=high,term=a[low];
    if(i<j)
    {
        while(i!=j)
        {
            while(a[j]>term&&j!=i)
            {
                j--;
            }
                if(j!=i)
                    a[i]=a[j];i++;
            while(a[i]<term&&i!=j)
            {
                i++;
            }
            if(j!=i)
                a[j]=a[i];j--;
        }
        a[i]=term;
        //将一趟遍历做好。
        //将剩下来的点按照这种规律进行定点,直到所有点遍历完成
        pai(a,1ow,i-1);
        pai(a,i+1,high);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值