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

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软件机器人】公众号免费申请试用。

Spring Boot 3.2.0 正式发布 滴滴史上最严重服务故障,罪魁祸首是底层软件 or “降本增笑”? 程序员篡改 ETC 余额,一年私吞 260 余万元 谷歌员工离职后抨击大老板,曾深度参与 Flutter 项目、制定 HTML 相关标准 微软 Copilot Web AI 将于12月1日正式上线,支持中文 PHP 8.3 GA Firefox 在 2023 变得更快了 Rust Web 框架 Rocket 发布 v0.5:支持异步、SSE、WebSockets 等 龙芯 3A6000 桌面处理器正式发布,国产之光! 博通宣布成功收购 VMware
{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/4868096/blog/10295403