快速排序

快速排序

思想:1,、在待排的元素中任取一个元素作为基准(通常选第一个元素,但最好的选择是从待排元素中随机选取一个作为基准),称为基准元素。
2、将待排序的元素进行区分,比基准元素大的元素放在他的右边,比其小的元素放在它的左边。
3、对左右两个分区重复以上步骤直到所有的元素都是有序的

public class QuickSort {
    /*
     * 快速排序
     */
    public static void quickSort(int[] arr, int _left, int _right) {
        int left = _left;
        int right = _right;
        int temp = 0;
        //待排序的元素至少有两个的情况
        if (left < right) {
            //待排序的第一个元素作为基准元素
            temp = arr[left];
            //从左右两边交替扫描,直到left = right
            while (left != right) {
                while (right > left && arr[right] >= temp){
                    //从右往左扫描,找到第一个比基准元素小的元素
                    right--;
                }
                //找到元素后与arr[left]交换
                arr[left] = arr[right];

                while (left < right && arr[left] <=temp) {
                    //从左往右扫描,找到第一个比基准元素大的元素
                    left++;
                }
                //找到元素后与arr[right]交换
                arr[right] = arr[left];
            }
            //基准元素归位
            arr[right] = temp;
            //对基准元素左边的元素进行递归排序
            quickSort(arr, _left, right - 1);
            //对基准元素右边的进行递归排序
            quickSort(arr,left + 1, _right);
        }
    }

    public static void main(String[] args) {
        int[] array = {10,5,3,1,7,2,8};
        quickSort(array, 0, array.length - 1);
        System.out.println(array);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值