快速排序个人理解

 
  

  将整个数组分为三个部分,中轴,中轴前部,中轴后部。每一次排序,前一部分<中轴<后一部分。
然后采用分而治之的思想继续排序。

其算法如下:

public static void quickSort(int[] array,int low,int high){
                if(low>=high){
                    return;
                }
                int lowIndex=low;
                int highIndex=high;
                int middle=array[lowIndex];
                while(lowIndex<highIndex){
                    //将第一个数(中轴)与最后一个数进行比较,如果第一个数比最后一个数小,就和其前一个数
                    //进行比较,以此类推。直到找到比第一个数小的值
                    while(lowIndex<highIndex&&middle<array[highIndex]){
                        highIndex--;
                    }
                    //将比第一个数(中轴)大的数放入中轴处。
                    if(lowIndex<highIndex){
                        array[lowIndex++]=array[highIndex];
                    }
                    //经中轴与前一部分刚刚中轴所在处的后一位数进比较,如果比该数大,那么就和该数的后一位数进行比较,
                    //以此类推。直到找到比中轴大的数。
                    while(lowIndex<highIndex&&middle>array[lowIndex]){
                        lowIndex++;
                    }
                    //将比中轴小的数放入刚刚空出来的数那个位置。
                    if(lowIndex<highIndex){
                        array[highIndex--]=array[lowIndex];
                    }
                    array[lowIndex]=middle;
                    quickSort(array, low,lowIndex-1 );
                    quickSort(array, lowIndex+1, high);
                }
            
        }

 

转载于:https://www.cnblogs.com/orchid9/p/7611866.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值