快速排序---效率极高

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

代码实现:

package sort;

public class quickSort {
    public static void main(String[] args) {

        int arr[] = {6, 3, 7, 9, 5, 1, 4, 8};
        quickSort(arr, 0, arr.length - 1);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    public static void quickSort(int[] arr, int left, int right) {
        //进行判断  如果左边索引比右边索引要大 是不合法的 直接使用return结束这个方法
        if (left > right) {
            return;
        }
//        定义变量保存基准值
        int base = arr[left];
//        定义变量i指向最左边
        int i = left;
//        定义变量j指向最右边
        int j = right;

/**
 *  j从右往左 检索出比基准值小的,如果检索到比基准值小的就停下,否则就继续检索
 *
 *  i从左往右 检索出比基准值小的,如果检索到比基准值小的就停下,否则就继续检索
 */

        while (i != j) {
//            从右往左检索
            while (arr[j] >= base && i < j) {
                j--;//j从右往左移动
            }
//            从左往右检索
            while (arr[i] <= base && i < j) {
                i++; //i从左往右移动
            }
            //代码走到这里   i停下来  j也停下来  然后就交换两个i和j的位置
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }

        /**
         * 如果上面while循环的条件不成立 就会跳出过这个循环,往下执行 。
         * 同时也说明了这个i和j相遇了   如果i和j相遇了就要交换基准数
         * 这个元素和相遇这个位置的元素
         */

        arr[left] = arr[i];
        //把基准数赋值给相遇位置的元素
        arr[i] = base;

        quickSort(arr, left, i - 1);
        quickSort(arr, j + 1, right);
    }
}
发布了138 篇原创文章 · 获赞 368 · 访问量 222万+

猜你喜欢

转载自blog.csdn.net/qq_43229543/article/details/104926537