快速排序2

import java.util.Random;

public class MySort {

    public static void main(String[] args) {

        int[] intArray = new int[10];

        for(int i=0; i<intArray.length; i++) {
        int random = (int) (new Random(System.currentTimeMillis()).nextInt(100));
            intArray[i] = random;
        }

        for(int i : intArray) {
            System.out.print(i + " ");
        }

        quickSort2(intArray, 0, intArray.length - 1);
        System.out.println();

        for(int i : intArray) {
            System.out.print(i + " ");
        }

    }

    private static void quickSort2(int[] array, int l, int r) {
        if(l >= r) {
            return;
        }

         /*
            i:要比较数组最左边的位置 
            j:要比较数组最右边的位置 
            tmp1:记录被比较的数组,用户一次比对完毕后放到数组的中间位置 
            tmp2:一次中的一轮比对完毕后用于数据交换的临时变量
         */
        int i=l,j=r,tmp1=array[l],tmp2;
        // 如果i和j没有相等,说明一轮没有对比完,需要继续比对
        while(i < j) {
            // 比tmp1大的全部放到右边,符合条件就j--
            while(array[j] >= tmp1 && i < j) {
                j--;
            }
            // 比tmp1小的全部放到左边,符合条件就i++
            while(array[i] <= tmp1 && i < j) {
                i++;
            }

                // 如果i=j就不用交换了,走到这里说明一次中的一轮比对完毕
                if(i < j) {
                // 把不符合的数字做位置交换
                tmp2 = array[i];
                array[i] = array[j];
                array[j] = tmp2;
            }
        }
        
        // 走到这里说明一次比对完毕
        // ---------------------------------------------------
        // 把比比对值小的放到数据最左边
        array[l] = array[i];
        // 把比对的值放到数组中间
        array[i] = tmp1;

        // 重复上述步骤
        // ---------------------------------------------------
        // 继续比对小的值
        quickSort2(array, l, i-1);
        // 继续比对大的值
        quickSort2(array, j+1, r);
    }

    /*private static int[] quickSort(int[] array, int l, int r) {
        int i=l, j=r, m=array[l];
        if(l < r) {
            while(i<j) {
                while(i < j && array[j] > m) {
                    j--;
                }
                if(i < j) {
                    array[i++] = array[j];
                }
                while(i < j && array[i] < m) {
                    i++;
                }
                if(i < j) {
                    array[j--] = array[i];
                }
            }
            array[i] = m;

            quickSort(array, 0, j -1);
            quickSort(array, i+1, array.length - 1);
        }
        return array;
    }*/
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值