5秒用Java写一个快速排序算法?这个我在行

简介: 快速排序是一种非常高效的排序算法,由英国计算机科学家霍尔在1960年提出。它的基本思想是选择一个基准元素将待排序数组分成两部分,其中一部分的所有元素都比基准元素小,另一部分的所有元素都比基准元素大,然后对这两部分再分别进行快速排序,整个排序过程可以递归进行。这种算法的主要步骤是:1、 选择一个元素作为基准(pivot)。2、 把数组分为两部分:一部分包含所有小于基准的元素,另一部分包含所有大于或等于基准的元素。这个过程称为分区(partition)操作。3、 对这两个子数组进行递归排序

快速排序是一种非常高效的排序算法,由英国计算机科学家霍尔在1960年提出。它的基本思想是选择一个基准元素将待排序数组分成两部分,其中一部分的所有元素都比基准元素小,另一部分的所有元素都比基准元素大,然后对这两部分再分别进行快速排序,整个排序过程可以递归进行。
这种算法的主要步骤是:
1、 选择一个元素作为基准(pivot)。
2、 把数组分为两部分:一部分包含所有小于基准的元素,另一部分包含所有大于或等于基准的元素。这个过程称为分区(partition)操作。
3、 对这两个子数组进行递归排序
下面是一个由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写的一个快速排序算法的基本流程。当然,实际使用中,我们还需要考虑一些其他的因素,比如如何选择一个好的基准元素(这通常会影响排序的效率),以及在内存有限的情况下如何处理大型数组(这通常会影响程序的稳定性)。而这些,采用代码编写最佳实践及大规模机器联合训练的方式诞生的FuncGPT(慧函数)都已经帮你实现。我们将以上代码放到可以媲美ChatGPT—4的文心一言中,得到的评价是:这个Java代码实现了一个结构清晰、易于理解和使用的快速排序算法(详情见截图)。

作为全栈式全自动软件开发工具飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。目前开发免费使用,下载链接:https://suo.im/76V9w

相关文章
|
9天前
|
搜索推荐 C语言
【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
本文介绍了快速排序的升级版——三路快排。传统快速排序在处理大量相同元素时效率较低,而三路快排通过将数组分为三部分(小于、等于、大于基准值)来优化这一问题。文章详细讲解了三路快排的实现步骤,并提供了完整的代码示例。
35 4
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
105 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
1月前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
20 1
|
1月前
|
搜索推荐 Java Go
深入了解快速排序算法
深入了解快速排序算法
32 2
|
1月前
|
算法 Java Linux
java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
这篇文章介绍了如何在Java中使用Graphics2D在图片上绘制文字,并实现自动换行的功能。
97 0
|
1月前
|
存储 搜索推荐 算法
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
|
1月前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
21 0
|
1月前
|
搜索推荐 C语言 C++
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)

热门文章

最新文章