教你学习快速排序算法-程序员必备哦

栏目: IT资讯 · 发布时间: 6年前

内容简介:排序这个序列:6 1 2 7 9 3 4 5 10 8

举个例子

排序这个序列:6 1 2 7 9 3 4 5 10 8

  • 步骤1:选择一个基准数作为对比的开始值,这里选择第一个数6:
  • 步骤2、先从右往左找一个小于 6 的数,再从左往右找一个大于 6 的数。

教你学习快速 <a href='https://www.codercto.com/topics/21904.html'>排序</a> 算法-程序员必备哦

  • 步骤3、然后交换他们

教你学习快速排序算法-程序员必备哦

变成这样子:

教你学习快速排序算法-程序员必备哦

继续执行步骤2和3,直到两个哨兵相遇,:

教你学习快速排序算法-程序员必备哦 教你学习快速排序算法-程序员必备哦

左右两个哨兵都走到3:

教你学习快速排序算法-程序员必备哦
  • 步骤4:将开始选择基准数字6换到中间,测试6左边的数都小于6,右边的数都大于6。完成第一次循环:

教你学习快速排序算法-程序员必备哦 教你学习快速排序算法-程序员必备哦

第一次完成之后,再按照此方法分别对6左右两边的数列进行递归排序即可。是不是很简单。

看下代码就更清晰了:

void quicksort(int a[], int left,int right)
    {
        int i,j,t,temp;
        if(left>right)
            return;

        temp=a[left]; //temp中存的就是基准数
        i=left;
        j=right;
        while(i!=j)
        {
            //顺序很重要,要先从右边开始找
            while(a[j]>=temp && i<j)
                j--;
            //再找右边的
            while(a[i]<=temp && i<j)
                i++;
            //交换两个数在数组中的位置
            if(i<j)
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
        //最终将基准数归位
        a[left]=a[i];
        a[i]=temp;

        quicksort(a, left,i-1);//继续处理左边的,这里是一个递归的过程
        quicksort(a, i+1,right);//继续处理右边的 ,这里是一个递归的过程
    }

也可以这么写:

/**
     * 快排
     * @param arr
     * @param low
     * @param high
     * @return
     */
    public static int[] quit(int arr[], int low, int high) {
        int l = low;
        int h = high;
        int key = arr[l];  //先找出一个数作为基准数(这里取数组最中间的一位)

        while (l < h) {
            while (l < h && arr[h] >= key) h --; //从后向前:寻找比基准数小的数据,如果找到,停下来
            if (l < h) {  //“探测”到了符合要求的数据,则交换数据,继续顺着方向寻找
                arr[l] = arr[h];
                l ++;
            }
            while (l < h && arr[l] <= key) l ++; //从前向后:寻找比基准数大的数据,如果找到,停下来
            if (l < h) { ////“探测”到了符合要求的数据,则交换数据,继续顺着方向寻找
                arr[h] = arr[l];
                h --;
            }
        }
        arr[l] = key;
        if (l > low) quit(arr, low, l - 1);
        if (h < high) quit(arr, h + 1, high);
        return arr;
    }

热度: 1


以上所述就是小编给大家介绍的《教你学习快速排序算法-程序员必备哦》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

复杂网络理论及其应用

复杂网络理论及其应用

汪小帆、李翔、陈关荣 / 清华大学出版社 / 2006 / 45.00元

国内首部复杂网络专著 【图书目录】 第1章 引论 1.1 引言 1.2 复杂网络研究简史 1.3 基本概念 1.4 本书内容简介 参考文献 第2章 网络拓扑基本模型及其性质 2.1 引言 2.2 规则网络 2.3 随机图 2.4 小世界网络模型 2.5 无标度网络模型 ......一起来看看 《复杂网络理论及其应用》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

MD5 加密
MD5 加密

MD5 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具