Java算法(回顾)-快速排序

import java.util.Arrays;

/**
 * 快速排序-分治思想
 * 描述:选择一个基准数,小于基准数的都放在左边,大于基准数的都放在右边。递归直到全部有序。
 */
public class QuickSort {
    public static void main(String[] args){
        // 待排序数组
        int[] arr = {3, 1, 6, 2, 5, 8, 4};
        // 排序结果
        quickSort(arr, 0, arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    /**
     * 快速排序
     */
    public static void quickSort(int[] arr, int sPos, int ePos){
        if(sPos > ePos){
            return;
        }
        // 开始位置
        int start = sPos;
        // 结束位置
        int end = ePos;
        // 基准数设为开始位置对应值
        int key = arr[sPos];
        while(start != end){
            // 从后面开始与基准数比较
            while(end > start && arr[end] >= key){
                // 比基准值大,结尾位置前移,继续比较直到小于基准值
                end--;
            }
            // 从前面开始与基准数比较
            while(end > start && arr[start] <= key){
                // 比基准值大,开始位置后移,继续比较直到大于基准值
                start++;
            }
            // 交换两个值,比基准数大的放在右边,小的放在左边
            if(start < end){
                int temp = arr[start];
                arr[start] = arr[end];
                arr[end] = temp;
            }
        }
        // 基准值放在中间
        arr[sPos] = arr[start];
        arr[start] = key;
        // 基准数左边的快排
        quickSort(arr, sPos, start - 1);
        // 基准数右边的快排
        quickSort(arr, start + 1, ePos);
    }
}

上一篇:60. Permutation Sequence


下一篇:&useSSL=false last packet sent successfully to the server was 0 milliseconds ago.