快速排序算法,这么写打败95%的程序员

原创
2023/11/27 18:05
阅读数 57

1960年,英国计算机科学家霍尔提出了一种高效的排序算法——快速排序。其核心思想是选定一个基准元素,将需排序的数组分割成两部分。其中一部分都比基准元素小,另一部分都比基准元素大。接着对这两部分分别进行快速排序,最后通过递归完成整个排序过程。这种算法效率高,被广泛应用。

这个算法的主要步骤包括:

1.在选择一个基准(pivot)元素之前,需要做出一个决定。

2.将数组划分为两个部分:一个部分包含所有小于基准的元素,另一个部分包含所有大于或3.等于基准的元素。这个步骤被称为进行分区操作。

对这两个子数组进行递归排序。

下面是由全栈式全自动软件开发工具 soflu 软件机器人,推出的 FuncGPT(慧函数)生成用 Java 实现快速排序的基本示例:

// 类名:QuickSort

// 函数名:quickSort

// 函数功能:使用快速排序算法对数组进行排序

// POM依赖包:无



public class QuickSort {



    /**

     * 使用快速排序算法对数组进行排序

     * @param arr 待排序的数组

     */

    public static void quickSort(int[] arr) {

        if (arr == null || arr.length <= 1) {

            return;

        }

        sort(arr, 0, arr.length - 1);

    }



    /**

     * 快速排序的递归实现

     * @param arr 待排序的数组

     * @param low 左边界

     * @param high 右边界

     */

    private static void sort(int[] arr, int low, int high) {

        if (low < high) {

            int pivot = partition(arr, low, high); // 获取基准值的索引

            sort(arr, low, pivot - 1); // 对基准值左侧的子数组进行排序

            sort(arr, pivot + 1, high); // 对基准值右侧的子数组进行排序

        }

    }



    /**

     * 快速排序的分区实现

     * @param arr 待排序的数组

     * @param low 左边界

     * @param high 右边界

     * @return 选择的基准值的索引

     */

    private static int partition(int[] arr, int low, int high) {

        int pivot = arr[low]; // 选择第一个元素作为基准值

        int i = low + 1;

        int j = high;



        while (i <= j) {

            while (i <= j && arr[i] <= pivot) {

                i++;

            }



            while (i <= j && arr[j] > pivot) {

                j--;

            }



            if (i < j) {

                swap(arr, i, j);

            }

        }



        swap(arr, low, j); // 将基准值放到正确的位置上



        return j;

    }



    /**

     * 交换数组中两个位置的元素

     * @param arr 数组

     * @param i 位置1

     * @param j 位置2

     */

    private static void swap(int[] arr, int i, int j) {

        int temp = arr[i];

        arr[i] = arr[j];

        arr[j] = temp;

    }



    public static void main(String[] args) {

        int[] arr = new int[]{9, 5, 1, 8, 3, 7, 4, 2, 6};

        quickSort(arr);

        for (int num : arr) {

            System.out.print(num + " ");

        }

    }

}

```



// 函数示例

// 使用快速排序算法对数组进行排序示例

// 入参:arr,待排序的数组

// 出参:无,直接对输入的数组进行排序

// 调用示例:

// int[] arr = new int[]{9, 5, 1, 8, 3, 7, 4, 2, 6};

// QuickSort.quickSort(arr);

// 输出结果:例如,对数组[9, 5, 1, 8, 3, 7, 4, 2, 6]进行排序

// 排序后的数组为[1, 2, 3, 4, 5, 6, 7, 8, 9]

// 则输出结果为:1 2 3 4 5 6 7 8 9

```

// 温馨提示:以上代码由 FuncGPT 生成,编译打包请使用 QuickSort.java 文件。

这段代码中的主要函数包括:

  1. quickSort(int[ ] arr): 这是快速排序的入口函数,它接受一个整数数组作为参数,并对它进行排序。如果输入的数组为空或者只包含一个元素,这个函数就会直接返回。
  2. sort(int[ ] arr, int low, int high): 这是一个递归函数,用于对数组的子区间进行排序。如果左边界 low 小于右边界 high,它会选择一个基准元素,然后对基准元素左侧和右侧的子数组分别进行递归排序。
  3. partition(int[ ] arr, int low, int high): 这个函数用于实现快速排序中的分区操作。它选择数组中的一个基准元素,然后把数组中的其他元素移动到基准元素的左侧或右侧。在这个过程中,小于基准元素的元素会被移动到基准元素的左侧,大于基准元素的元素会被移动到基准元素的右侧。这个函数返回的是基准元素在排序后数组中的位置。
  4. swap(int[ ] arr, int i, int j): 这个函数用于交换数组中两个位置的元素。在 main 函数中,创建了一个待排序的数组,然后调用 quickSort 函数对其进行排序,最后打印排序后的数组。如果想知道排序后的结果是什么,你可以运行这段代码并查看控制台输出。这个例子中,输入的数组是 [9, 5, 1, 8, 3, 7, 4, 2, 6],经过快速排序后,输出的结果是 [1, 2, 3, 4, 5, 6, 7, 8, 9]。

以上就是通过 FuncGPT(慧函数)用 Java 写的一个快速排序算法的基本流程。我们将以上代码放到文心一言中,得到的评价是:这个 Java 代码实现了一个结构清晰、易于理解和使用的快速排序算法(详情见截图)。

https://oscimg.oschina.net/oscnet/up-f9ad9cc02d252071b9ba7f764af41457041.png

 

作为全栈式全自动软件开发工具飞算 SoFlu 软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述 Java 函数需求,实时生成高质量、高可读性的 Java 函数代码。生成代码可直接复制到 IDEA,或一键导入 Java 全自动开发工具函数库。关注【SoFlu软件机器人】公众号免费申请试用。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部