`

Java 快排 (基于数组) 附图解

阅读更多

采用分而治之的技术

    步骤:

    1. 确定中心元素,然后将中心元素与表的第一个元素交换

        索引smallIndex 指向小于中心元素的最后一个元素,初始化为表中的第一个元素

    2.对于表中剩余的元素

        如果当前元素小于中心元素

            a. smallIndex1

            b. 交换当前元素和由smallIndex指向的数组元素

    3.交换第一个元素(即中心元素)和由smallIndex指向的数组元素

 

public class QuickSort {      
    private int partition(int arr[], int first, int last) {      
        int pivot;      
        int index, smallIndex;      
     
        swap(arr, first, (first + last) / 2);      
        pivot = arr[first];      
        smallIndex = first;      
     
        for (index = first + 1; index <= last; index++) {      
            if (arr[index] < pivot) {      
                smallIndex++;      
                swap(arr, smallIndex, index);      
            }      
        }      
        swap(arr, first, smallIndex);      
        return smallIndex;      
    }      
    private void swap(int[] arr, int loc, int minIndex) {      
        int temp;      
        temp = arr[loc];      
        arr[loc] = arr[minIndex];      
        arr[minIndex] = temp;      
     
    }      
    public void quickSort(int arr[], int first, int last) {      
        int pivotLocation;      
        if (first < last) {      
            pivotLocation = partition(arr, first, last);      
            quickSort(arr, first, pivotLocation - 1);      
            quickSort(arr, pivotLocation + 1, last);      
        }      
    }      
    public static void main(String[] args) {      
        QuickSort qk = new QuickSort();      
        int arr[] = { 2, 568, 34, 46, 9, 23, 89, 43, 572, 684, 783, 543 };      
        qk.quickSort(arr, 0, arr.length - 1);      
        for (int i = 0; i < 12; i++) {      
            System.out.print(arr[i] + ",");      
        }      
        // 2,9,23,34,43,46,89,543,568,572,684,783,      
    }      
}   

 

 

图解:

中心元素位于第一个数组元素的位置,下层子表的元素均小于中心元素,上层子表的元素均大于或等于中心元素。变量smallIndex包含下层子表的最后一个元素的索引,变量index包含下一个需要移动的元素的索引。按照步骤2,如果表的下一个元素arr[index]小于中心元素,就将smallIndex向前移动到下一个数组单元,并交换arr[index]arr[smallIndex]

上层表位于两个索引indexsmallIndex之间。

 快速排序

  • 大小: 133.8 KB
分享到:
评论

相关推荐

    06-Java基础(数组-内存图解)

    本节我们将深入探讨“Java基础中的数组与内存图解”,了解数组在内存中的存储方式及其工作原理。 首先,数组是Java中用于存储固定大小同类型元素的集合。在创建一个数组时,我们需要指定元素的类型和数组的长度。...

    数组知识图解(JAVASE)

    数组知识梳理

    JavaSE基础篇 -- jdk配置,数组及其应用,栈和堆内存图解(Java源码)

    在这个主题中,我们将深入探讨JDK的配置、数组的应用以及栈和堆内存的图解,同时通过具体的Java源码来加深理解。 首先,JDK(Java Development Kit)是开发和运行Java应用程序必不可少的软件包。配置JDK主要包括...

    Java图解教程Java图解教程

    Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解教程Java图解...

    JAVA--初级篇--数组的格式&数组的初始化&内存图解.ctb

    小樱桃格式的Java初级篇格式,如果需要小樱桃软件的可以私聊我,不需要关注哦,私聊即可

    非常好的Java入门图解教程

    这个"非常好的Java入门图解教程"旨在帮助初学者轻松踏入Java的世界。本文将深入探讨Java的基础知识,包括语法、类与对象、数据类型、控制结构以及异常处理等方面。 1. **Java基础知识** - **Java开发环境**:首先...

    Java中数组在内存中存放原理的讲解

    一维数组的存储情况:以int[]型数组为例,假设数组长度为N,那么需要的内存占用(24+4N)个字节,原因分析比较简单,图解示例如下:即占用内存总量=头信息内存+数组N个int值占用内存。 二维数组的存储情况:对于...

    基于MATLAB的图解粒度参数计算.pdf

    基于MATLAB的图解粒度参数计算是一项针对沉积物粒度分析的重要研究。粒度参数是描述沉积物粒度分布的重要特征,它反映了沉积物颗粒大小的离散程度,以及沉积物在搬运和沉积过程中的动力学特征。在沉积分析中,粒度...

    Java图解创意编程:从菜鸟到互联网大厂之路.pptx

    "Java图解创意编程:从菜鸟到互联网大厂之路" 《Java图解创意编程:从菜鸟到互联网大厂之路》这本书是一本面向初学者的编程书籍,旨在帮助读者从零基础开始学习Java编程,并逐步掌握互联网大厂常用的核心技术。本书...

    图解算法小册-Java版

    ### 图解算法小册-Java版 #### 一、引言 随着计算机科学的发展,算法作为其中不可或缺的一部分,越来越受到人们的重视。《图解算法小册-Java版》旨在通过直观的方式,帮助读者理解并掌握各种算法的核心思想,无论你...

    图解java(4)

    图解java4 很好表达java语言与概念。

    java高并发解决方案(图解).xmind

    java高并发解决方案(图解).xmind,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!

    图解数据结构--使用Java

    全书内容浅显易懂,利用大量且丰富的图示与范例, 详解复杂的抽象理论,从最基本的数据结构概念开始 说明,再以Java工具加以诠释阵列结构、堆栈、链表 、队列、排序、查找等重要的概念,引领读者抓住重 点轻松进入...

    java图解教程

    - **数据类型**:Java分为基本数据类型(如int、float、char等)和引用数据类型(类、接口、数组)。 - **变量**:声明并初始化变量是存储数据的方式,每个变量都有特定的数据类型。 - **运算符**:包括算术、...

    经典中经典Java图解教程

    《经典中经典Java图解教程》是一份专为初学者和有一定基础的Java开发者设计的教育资源,通过图形化的解释方式,使得复杂的编程概念变得更为直观易懂。这份教程旨在帮助学习者深入理解Java语言的核心特性,提升编程...

    基于Java语言的经典设计模式图解与代码示例源码

    该项目是关于Java语言的经典设计模式的图解与代码示例,包含132个文件,包括128个Java源代码文件、2个文本文件、1个Markdown文件和1个XML文件,旨在通过图文并茂的方式帮助理解设计模式。

    Java设计模式-图解-附代码

    Java设计模式-图解-附代码

    JAVA时间和日期图解.rar

    总的来说,这个"JAVA时间和日期图解"教程将帮助你掌握Java中处理日期和时间的最佳实践,理解新的`java.time`包的优势,以及如何在实际项目中有效地使用这些工具。通过学习,你将能够编写出更优雅、更易于维护的日期...

    2023年java工程师面试宝典(附BAT大厂真题)

    2023年java工程师面试宝典(附BAT大厂真题),400MB的真题祝你早日进入大厂 本套面宝典包括了: 1. Java基础知识的汇总 2.设计模式的常见面试题汇总 3.消息队列常见面试题 4.RockMQ从入门到实战 5.图解操作系统 6....

    java 斐波拉契数列递归超详细图解

    java 斐波拉契数列递归超详细图解

Global site tag (gtag.js) - Google Analytics