快速排序----科大讯飞2021 java开发岗

本次博客主要是最近笔试了科大讯飞有一道题是关于快速排序。

快排的基本思想

1.先从数列中取出一个数作为基准数。一般是左边第一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
快排其实是分治法的一种方法。对分治法的理解有助于对快排的理解。

public class quist {
    public static void main(String[] args) {
        int a[] = new int []{4,3,2,3,6,74,34,9};
        quick_sort(a,0,a.length-1);
        for (int i:a
             ) {
            System.out.println(i);
        }

    }

    //快排迭函数体
    public static void quick_sort(int a[],int left,int right){
        if(left < right){
            int i= left;
            int j = right;
            int x = a[left]; //a[left]即是a[i] 为第一个坑。
            while (i < j){
                //从右向做找比x小的数来填a[i]
                while (i<j&& a[j] > x){
                    j--;
                }
                if(i < j){
                    a[i++] = a[j];
                }
               //从左向右扫描找比小的数来填a[j];
               
                while (i < j&&a[i] < x){
                    i++;
                }
                if(i < j){
                    a[j--] = a[i];
                }
            }
            a[i] = x;
            quick_sort(a,left,i-1);
            quick_sort(a,i+1,right);
        }
    }
}

1.i =left; j = right; 将基准数挖出形成第一个坑a[i]。
2.j–由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。
3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。
4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值