快速排序Java实现

其他排序,可见我的其他博文)


/**
 * 快速排序
 * 算法思想:把选定主元,然后把小于主元的元素放到主元前面,把大于主元的元素放到主元后面,
 * 然后分别对前面和后面的元素递归,再次选定主元,继续操作,递归求解,算法复杂度跟主元的选取有关,
 * 算法复杂度为:平均时间:O(nlogn)
 *
 */
public class QuickSort {

    /**
     * 快速排序入口
     * 传入要排序的数组,然后交给它的重载方法,开始快速排序
     * @param arr
     */
    public static void quickSort(int[] arr){
        quickSort(arr,0,arr.length - 1);
    }

    /**
     * 真正的快速排序算法,
     * 使用递归的方式实现
     * @param arr
     * @param first
     * @param last
     */
    private static void quickSort(int[] arr, int first, int last) {
        if(last > first){
            //通过partition函数为主要的算法体
            int pivotIndex = partition(arr,first,last);
            //主元左边开始递归调用
            quickSort(arr,first,pivotIndex - 1);
            //主元右边开始递归调用
            quickSort(arr,pivotIndex + 1,last);
        }
    }

    /**
     * 算法核心代码,
     * 用于把大于主元的元素放到主元的右边,小于主元的元素放到左边,要多注意边界条件
     * @param arr
     * @param first
     * @param last
     * @return
     */
    private static int partition(int[] arr, int first, int last) {
        int pivot = arr[first];
        int low = first + 1;
        int high = last;
        while(high > low){
            while(low <= high && arr[low] <= pivot){
                low++;
            }
            while(low <= high && arr[high] > pivot){
                high--;
            }
            if (low < high){
                int temp = arr[high];
                arr[high] = arr[low];
                arr[low] = temp;
            }
        }
        while(high > first && arr[high] >pivot){
            high--;
        }
        if(pivot > arr[high]){
            arr[first] = arr[high];
            arr[high] = pivot;
            return high;
        }else{
            return first;
        }
    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值