快速排序练习

混江龙づ霸主 提交于 2020-08-05 08:38:22

步骤:

(1) 选择基准值。

(2) 将数组分成两个子数组:小于基准值的元素和大于基准值的元素。

(3) 对这两个子数组进行快速排序。

//对一个数组进行排序

public class QuickSort {

    //快速排序
    private static void quickSort(int[] arr, int low, int high) {
        if (low > high) {
            return;
        }
        //基准值
        int temp = arr[low];
        int i = low;
        int j = high;

        while (i < j) {
            //j从尾部向前遍历找到比temp小的数就停止
            while (arr[j] >= temp && i < j) {
                j--;
            }
            //i从起始向后遍历找到比temp大的数就停下
            while (arr[i] <= temp && i < j) {
                i++;
            }
            //此时j所在的位置小于基准值,i所在的位置大于基准值 交换彼此
            if (i < j) {
                int tempSwap = arr[j];
                arr[j] = arr[i];
                arr[i] = tempSwap;
            }
        }
        //i = j ,交换彼此
        arr[low] = arr[i];
        arr[i] = temp;

        //遍历基准值左边的数组
        quickSort(arr, low, j - 1);
        //遍历基准值右边的数组
        quickSort(arr, j + 1, high);
    }

    public static void main(String[] args) {
        int[] arr = {6, 10, 1, 2, 5, 3, 99, 25};
        quickSort(arr, 0, arr.length - 1);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!