使用Java如何实现快速排序算法?

2020-08-06 19:45发布

使用Java如何实现快速排序算法?

使用Java如何实现快速排序算法?

3条回答
杨晓春
2楼 · 2020-08-06 19:55

分析:
1、快速排序算法:先取一个标准数,然后从两端开始和这个标准数比较大小,比标准数大的放右边,比标准数小的放左边。
2、每比较一次后,两端相应的下标分别向中间移动,左边的向右移动(下标 +1),右边的向左移动(下标 -1)。
3、当左右两个下标重合时,再将标准数赋给这个重合的位置。
4、第一轮结束后,会出现左右两块,左边的都小于等于标准数,右边的都大于等于标准数。
5、将左右两块分别看成一个新的数组,进行递归。
6、递归截至的条件为:左边的位置不小于右边的位置。

具体代码如下:

import java.util.Arrays;public class QuickSort {

    public static void main(String[] args) {
        int[] arr = new int[]{5,3,7,3,8,2,7,1,9,3,4,2,9,8,6,9,5,0,5};
        System.out.println(Arrays.toString(arr));
        quickSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }

    private static void quickSort(int[] arr, int start, int end) {
        if(start < end){
            // 确定一个标准数,用来进行比对
            int stard = arr[start];
            // 记录一下排序的下标,最高位和最低位
            int high = end;
            int low = start;
            // 利用循环找出比标准数大的数和比标准数小的数
            while(low < high){
                // 当右边(最高位)的数字比标准数大时
                while(low < high && arr[high] >= stard){
                    high--;
                }
                // 将右边的数字的值赋给左边的数字
                arr[low] = arr[high];
                // 然后判断左边的数字和标准数的大小
                while(low < high && arr[low] <= stard){
                    low++;
                }
                arr[high] = arr[low];
            }
            // 当高位和低位重合时,即两者指向同一个元素,再将标准数赋给他们(高位或者低位都行)
            arr[high] = stard;
            // 处理左边所有小于等于标准数的数字
            quickSort(arr, start, low);
            // 处理右边所有比标准数大的数字
            quickSort(arr, low + 1, end);
        }
    }}12345678910111213141516171819202122232425262728293031323334353637383940414243

代码实现结果如下:

[5, 3, 7, 3, 8, 2, 7, 1, 9, 3, 4, 2, 9, 8, 6, 9, 5, 0, 5][0, 1, 2, 2, 3, 3, 3, 4, 5, 5, 5, 6, 7, 7, 8, 8, 9, 9, 9]


拥抱太阳月亮
3楼 · 2020-08-06 20:58

快排原理:

        在要排的数(比如数组A)中选择一个中心值key(比如A[0]),通过一趟排序将数组A分成两部分,其中以key为中心,key右边都比key大,key左边的都key小,然后对这两部分分别重复这个过程,直到整个有序。

        整个快排的过程就简化为了一趟排序的过程,然后递归调用就行了。

        一趟排序的方法:

1,定义i=0,j=A.lenght-1,i为第一个数的下标,j为最后一个数下标

2,从数组的最后一个数Aj从右往左找,找到第一小于key的数,记为Aj;

3,从数组的第一个数Ai 从左往右找,找到第一个大于key的数,记为Ai;

4,交换Ai 和Aj 

5,重复这个过程,直到 i=j

6,调整key的位置,把A[i] 和key交换


希望对你有所帮助

爱搞事的IT小男孩
4楼 · 2020-08-07 09:20

快速排序,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

相关问题推荐

  • 回答 7

    首先创建表:CREATE TABLE `sys_sequence` (   `NAME` varchar(50) NOT NULL,   `CURRENT_VALUE` int(11) NOT NULL DEFAULT '0',   `INCREMENT` int(11) NOT NULL DEFAULT '1',   PRIMARY KEY (`NAME`) )插...

  • 回答 14

    原因:因为默认情况下,当getSession()后,session就被被创建。session在创建时,服务器会通过Cookie返回session 的ID给浏览器,之后服务器根据浏览器Cookie里的session的ID来分辨不同用户。但是,这种方法返回的cookie是保存在浏览器的内存中,浏览器关闭后...

  • 回答 15

    1、什么是线程池:  java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。       ...

  • 回答 4

    我知道快速排序是

  • 回答 14

    优化一下分页,每次不一定要取出所有记录,再说搜索结果太过也没什么意义,通过主键来排序,即便不用全文索引也应该是很快的.

  • 常见的算法有哪些?2020-06-23 10:35
    回答 1
    已采纳

    (一)基本算法 : 1.枚举 2.搜索: 深度优先搜索 广度优先搜索 启发式搜索 遗传算法 (二)数据结构的算法 (三)数论与代数算法 (四)计算几何的算法:求凸包 (五)图论 算法: 1.哈夫曼编码 2.树的遍历 3.最短路径 算法 4.最小生成树 算法 5.最小树形图 6....

  • 回答 10

    基础:比如计算机系统、算法、编译原理等等Web开发: 主要是Web开发相关的内容,包括HTML/CSS/js(前端页面)、 Servlet/JSP(J2EE)以及MySQL(数据库)相关的知识。它们的学习顺序应该是从前到后,因此最先学习的应该是HTML/CSS/JS(前端页面)。J2EE:你需...

  • 回答 2

    void solve(){int a,b,c,d,e,f;int y,z;    for(a=1;a

  • 回答 6

    算法是Java大数据算法  肯定有用的

  • 回答 6

    冒泡排序(BubbleSort)是一种最简单的排序算法。它的基本思想是迭代地对输入序列的第一个元素到最后一个元素进行俩俩比较,当满足条件时交换这俩个元素的位置,该过程持续到不需要执行上述过程的条件时。选择排序(SelectSort)是一种原地(in-place)排序算法,适...

  • 回答 4

    算法工程师一般都是学的数据挖掘和机器学习,而且对专业要求比较高,对能力也有一定的限制。算法工程师通过算式来完成不同的逻辑运算,他们的工作范围有对图像音频视频等信息进行处理,如图像和视频的分类、检测、识别、跟踪、计算成像等,通过大数据分析进行...

没有解决我的问题,去提问