JAVA算法-快速排序

快速排序算法

快速排序算法原理:
个人理解,快速排序算法就是一个不断重复的二分法,将一个数组或列表分成两部分,选择一个基准元素,令左侧部分都比这个基准元素小,右侧部分都比基准元素大。然后对左右两部分递归调用,不断循环,从而得到一个有序的数组。

例如:有一个int数组{ 49, 38, 65, 97, 76, 13, 27, 50 }
1、首先选取第一个元素作为基准元素。index = 49
2、先从右向左顺序比对,只要遇到比49小的,就将49这个位置替换掉,然后调换顺序,从左向右开始比对。
3、从左向右顺序比对时,只要遇到比49大的,将上次替换者的位置替换掉,然后调换比对顺序。

执行步骤:
1、从后向前比对,遇到27 < 49时第一次替换。然后调换比对顺序
{ 27, 38, 65, 97, 76, 13, 27, 50 }
2、从前向后比对,遇到65 > 49,然后替换刚刚27的位置,调换顺序。
{ 27, 38, 65, 97, 76, 13, 65, 50 }
3、遇到13 < 49 替换刚刚65的位置,调换顺序
{ 27, 38, 13, 97, 76, 13, 65, 50 }
4、遇到97 > 49 替换刚刚13的位置,调换顺序
{ 27, 38, 13, 97, 76, 97, 65, 50 }
这时已经循环完毕后,将最后的替换者97 ,用49替换。
{ 27, 38, 13, 49, 76, 97, 65, 50 }

到现在一次二分循环就完成了。得到49左侧的都比49小,右侧的都比49大。
然后进行递归调用,将 {27, 38, 13}和{ 76, 97, 65, 50 }分别通过上述方法进行二分,最后全部循环完毕时就可以得到一个有序的数组。

具体代码如下:

public static void main(String[] args) throws Exception {
    int[] arr = { 49, 38, 65, 97, 76, 13, 27, 50 };
    // 传递数组,low表示要进行二分的起始位置,high表示结束位置
    sort(arr, 0, arr.length-1);
    for (int v : arr) {
        System.out.print(v + " ");
    }
}

 public static void quickSort(int[] arr, int low, int high) {
        if (low >= high) {
            return;
        }
        int i = low;
        int j = high;
        int index = arr[low];

        while (i < j) {
            while (i < j && arr[j] >= index) {
                j--;
            }
            if (i < j) {
                arr[i] = arr[j];
            }
            while (i < j && arr[i] <= index) {
                i++;
            }
            if (i < j) {
                arr[j] = arr[i];
            }
        }
        arr[i] = index;
        quickSort(arr, low, i - 1);
        quickSort(arr, i + 1, high);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值