Java排序算法之快速排序

这篇博客详细介绍了两种版本的快速排序算法实现,包括了封装版和简化版的代码。封装版通过`checkPivot`方法寻找基值并进行排序,而简化版则直接在`quickSort`方法中完成。两种实现都利用了分治策略,通过选取基值并调整数组元素,将问题分解为更小的部分进行排序,最后达到整个数组有序的目的。
摘要由CSDN通过智能技术生成

封装版

public class QuickSort {

    public void quickSort(int[] arr) {
        int left = 0;
        int right = arr.length - 1;
        quickSort(arr, left, right);
    }

    public void quickSort(int[] arr, int left, int right) {
        int pivot;
        if (left < right) {
            /*查找基值*/
            pivot = checkPivot(arr, left, right);
            /*左快排*/
            quickSort(arr, left, pivot - 1);
            /*右快排*/
            quickSort(arr, pivot + 1, right);
        }
    }

    public int checkPivot(int[] arr, int left, int right) {
        int pivot = arr[left];
        while (left < right) {
            /*尾部的数值大于基值情况下*/
            /*不进行变动,指向尾部的索引向前一个位置,直到出现小于基值的情况出现,但不能越过头部索引*/
            while (arr[right] >= pivot && left < right) right--;
            /*推出循环后证明出现尾部的数值小于基值*/
            arr[left] = arr[right];
            /*头部的数值小于基值情况下*/
            /*不进行变动,指向头部的索引向后一个位置,直到出现大于基值的情况出现,但不能越过尾部索引*/
            while (arr[left] <= pivot && left < right) left++;
            /*推出循环后证明出现头部的数值大于基值*/
            arr[right] = arr[left];
        }
        /*放入基值*/
        arr[left] = pivot;
        /*返回基值索引*/
        return left;
    }
}

简化版

void quickSort(int[] arr, int start, int end) {
    int left = start, right = end;
    if (left < right) {
        int temp = arr[left];
        while (left < right) {
            while (left < right && arr[right] >= temp) right--;
            if (left < right) arr[left] = arr[right];
            while (left < right && arr[left] < temp) left++;
            if (left < right) arr[right] = arr[left];
        }
        arr[left] = temp;
        quickSort(arr, start, left - 1);
        quickSort(arr, left + 1, end);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值