快速排序,快排

public class QuickSort {
	/***
	 * 快排
	 * 一个数组int []arr,取第一个元素的值,赋值给temp=arr[0],做临时基准数(该temp仅做对比用)
	 * 1.左右两头一起向中间比较,找到右边第一个比temp小的数和再找到左边第一个比temp大的数,将这两个数在arr中交换位置
	 * 2.循环上一过程,直到左边数的下标idx_left和右边下标idx_right相等,或者左边大于右边下标.             while(idx_left<idx_right) 证明全部都调换过了,本次循环停止,结果为:大于temp的都过去相交坐标右边,小与temp的都去相交坐标左边了
	 * 3.将arr[交点坐标]与arr[0]互换,得到数组情况:  小与temp的数+temp+大于temp的数
	 * 4.递归排序:起点arr[0],终点arr[交点坐标]左侧数组进行该排序,起点arr[交点坐标],终点arr[arr.length]右侧数组进行排序
	 * 5.一直递归调用,直到最下级递归中不满足while(idx_left<idx_right),递归停止
	 * 6.排序完成
	 * @param arr
	 * @param left
	 * @param reght
	 */
    public static void quickSort(int[] arr,int left,int reght){
        int i,j,temp,t;
        if(left>reght){
            return;
        }
        i=left;
        j=reght;
        temp = arr[left];//temp就是基准位

        while (i<j) {//先看右边,依次往左递减
            while (temp<=arr[j]&&i<j) {//不满足该元素小于temp,则j--,继续对比向左下一个数
                j--;
            }
            //再看左边,依次往右递增
            while (temp>=arr[i]&&i<j) {//不满足该元素大于temp,则i++,继续对比向右下一个数
                i++;
            }
            //上述循环跳出,证明得到的arr[j]<temp,arr[i]>temp,则:
            if (i<j) {//证明此时i依然是j的左边
                t = arr[j];//交换arr[i]和arr[j]的值
                arr[j] = arr[i];
                arr[i] = t;
            }//else,若不满足i<j,说明temp左边的数都比temp小,右边的都比temp大了

        }
        //最后将基准为与i和j相等位置的数字交换
         arr[left] = arr[i];
         arr[i] = temp;
        //递归调用左半数组,起始位置为最左,终点为i,j交点
        quickSort(arr, left, j-1);
        //递归调用右半数组,起始位为j,i交点,终点为最右
        quickSort(arr, j+1, reght);
    }


    public static void main(String[] args){
        int[] arr = {22,31,1,223,29,92,82,95,9,11,22,35,54};
        quickSort(arr, 0, arr.length-1);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            System.out.print(",");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值