快速排序-java

思路

简单来,快速排序有以下几步:
1.确定数组中任意一个值作为key值,用于比较,一般用第一个值(例如数组{5,4,6,3,2,7},令key=5);

2.从数组的起始点以及终点开始分别交替进行比较,即先从右向左找第一个比key小的值,与key的位置对换,并记录当前这个值的位置low(low=0,hight=4,key=5,交换后{2,4,6,3,5,7});

3.换了一次之后开始从左往右找第一个比key大的值,与key值对换位置,并记录当前这个值的位置hight,(low=2,hight=4,key=5,交换后{2,4,5,3,6,7})这样称为一次循环,由于low

private static void fastSort(int[] arr,int begin,int end)
    {
        int low=begin;//记录左边上一次比较数的位置
        int hight=end;//记录右边上一次比较数的位置
        int key=arr[low];//指定一个key值
        int temp=0;
        while(low<hight)
        {
            while(key<=arr[hight] && low<hight)
            {
                hight--;//从右开始,比key大就不管,将hight减一
            }
            if(arr[low]>arr[hight])//找到一个在key的右边且比key小的值就对换位置
            {
                temp=arr[low];
                arr[low]=arr[hight];
                arr[hight]=temp;
            }
            while(key>=arr[low] && low<hight)
            {
                low++;//从左往右,比key小就不管,low值加一
            }
            if(arr[low]>arr[hight])//找到一个在key左边且值比key大的就对换
            {
                temp=arr[low];
                arr[low]=arr[hight];
                arr[hight]=temp;
            }
        }

        if(low>begin){fastSort(arr,begin,low-1);}//数组中key值前部分作为新的子数组队规调用
        if(end>hight){fastSort(arr,hight+1,end);}//后部分

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值