快速排序 java实现

快速排序的思想:

    ①找一个关键值,把比它小的放在其左边,比它大的放右边

    ②通过刚刚的关键值已经把整个数组分层了两堆,左边的任意一个都比右边的任意一个值小,

接着重复步骤①,把两堆再分成四堆,四堆再分成八堆,直到完成排序


代码:

package 排序算法;

public class 快速排序 {

    static int a[]={1,1,3,8,7,3,2,0,4,1};
    //static int d=0;
    public static void main(String[] args){
        sort(0,a.length-1);
                for(int e:a)
            System.out.print(e);
    }
    public static void sort(int low,int high){
        if(low>=high) //这个判断很重要 不然排好序后还会一直递归调用sort函数
            return;
        //记录当前分组的最左侧和最右侧
        int left=low;
        int right=high;
        int key=a[low];//用于比较的关键值
        int tmp;
        while (low<high){
            //把比关键字大的放右边
            while (high>low&&a[high]>=key)
                high--;
            if(low<high){
                tmp=a[low];
                a[low]=a[high];
                a[high]=tmp;
            }
            //把比关键字小的放左边
            while (low<high&&a[low]<=key)
                low++;
            if(low<high){
                tmp=a[low];
                a[low]=a[high];
                a[high]=tmp;
            }
        }
//        System.out.print("第"+(++d)+"趟次:");
//        for(int e:a)
//            System.out.print(e);
//        System.out.println();
        //分成左右两组,继续比较
        sort(left,high-1);
        sort(high+1,right);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值