Java实现快速排序

找工作时笔试做的一塌糊涂,连快速排序都不会了。

回来上网搜了半天,很多代码和讲解看完还是一知半解。而且包括百度百科在内,用eclipse一跑,全都有错。。。。。

于是决定还是自己搞吧。

在彻底理解了快速排序的思想后,写了如下自己能理解的代码:

public void sort(int[] a,int l,int r){
    //初始化参数,快排基准key选取的是数组中第一个元素
    int i=l;//l=0
    int j=r;//r=a.length-1
    int key=a[i];
    //结束调用条件
    if(i>=j){
        return;
    }
    //每一趟排序
    while(i<j){
        /**
         * 从左到右
         */
        //只要i<j且a[j]>=key,就j--
        while(i<j&&a[j]>=key){
            j--;
        }
        //直到a[j]<key时,a[j]交换到a[i]的位置
        if(i<j){
            a[i]=a[j];
        }
        /**
         * 从右到左
         */
        //只要i<j且a[i]<=key,就i++
        while(i<j&&a[i]<=key){
            i++;
        }
        //当a[i]>key时,a[i]交换到a[j]的位置
        if(i<j){
            a[j]=a[i];
        }
    }
    //此时有
    a[i]=key;
    //以a[i]为界,数组a分成左右两部分,分别递归调用自身
    sort(a,l,i-1);
    sort(a,i+1,r);
}

 

博主刚毕业,还在找工作中,这是我的第一篇博文。

水平显然是菜鸟级别,也许连菜鸟都不是。。

很多写代码的规范还不懂,欢迎大家一起交流~

posted @ 2017-08-28 22:13  QinsCraft  阅读(188)  评论(0编辑  收藏  举报