采用分而治之的技术
步骤:
1. 确定中心元素,然后将中心元素与表的第一个元素交换
索引smallIndex 指向小于中心元素的最后一个元素,初始化为表中的第一个元素
2.对于表中剩余的元素
如果当前元素小于中心元素
a. smallIndex加1
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]。
上层表位于两个索引index和smallIndex之间。
- 大小: 133.8 KB
分享到:
相关推荐
本节我们将深入探讨“Java基础中的数组与内存图解”,了解数组在内存中的存储方式及其工作原理。 首先,数组是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的世界。本文将深入探讨Java的基础知识,包括语法、类与对象、数据类型、控制结构以及异常处理等方面。 1. **Java基础知识** - **Java开发环境**:首先...
一维数组的存储情况:以int[]型数组为例,假设数组长度为N,那么需要的内存占用(24+4N)个字节,原因分析比较简单,图解示例如下:即占用内存总量=头信息内存+数组N个int值占用内存。 二维数组的存储情况:对于...
基于MATLAB的图解粒度参数计算是一项针对沉积物粒度分析的重要研究。粒度参数是描述沉积物粒度分布的重要特征,它反映了沉积物颗粒大小的离散程度,以及沉积物在搬运和沉积过程中的动力学特征。在沉积分析中,粒度...
"Java图解创意编程:从菜鸟到互联网大厂之路" 《Java图解创意编程:从菜鸟到互联网大厂之路》这本书是一本面向初学者的编程书籍,旨在帮助读者从零基础开始学习Java编程,并逐步掌握互联网大厂常用的核心技术。本书...
### 图解算法小册-Java版 #### 一、引言 随着计算机科学的发展,算法作为其中不可或缺的一部分,越来越受到人们的重视。《图解算法小册-Java版》旨在通过直观的方式,帮助读者理解并掌握各种算法的核心思想,无论你...
图解java4 很好表达java语言与概念。
java高并发解决方案(图解).xmind,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
全书内容浅显易懂,利用大量且丰富的图示与范例, 详解复杂的抽象理论,从最基本的数据结构概念开始 说明,再以Java工具加以诠释阵列结构、堆栈、链表 、队列、排序、查找等重要的概念,引领读者抓住重 点轻松进入...
- **数据类型**:Java分为基本数据类型(如int、float、char等)和引用数据类型(类、接口、数组)。 - **变量**:声明并初始化变量是存储数据的方式,每个变量都有特定的数据类型。 - **运算符**:包括算术、...
《经典中经典Java图解教程》是一份专为初学者和有一定基础的Java开发者设计的教育资源,通过图形化的解释方式,使得复杂的编程概念变得更为直观易懂。这份教程旨在帮助学习者深入理解Java语言的核心特性,提升编程...
该项目是关于Java语言的经典设计模式的图解与代码示例,包含132个文件,包括128个Java源代码文件、2个文本文件、1个Markdown文件和1个XML文件,旨在通过图文并茂的方式帮助理解设计模式。
Java设计模式-图解-附代码
总的来说,这个"JAVA时间和日期图解"教程将帮助你掌握Java中处理日期和时间的最佳实践,理解新的`java.time`包的优势,以及如何在实际项目中有效地使用这些工具。通过学习,你将能够编写出更优雅、更易于维护的日期...
2023年java工程师面试宝典(附BAT大厂真题),400MB的真题祝你早日进入大厂 本套面宝典包括了: 1. Java基础知识的汇总 2.设计模式的常见面试题汇总 3.消息队列常见面试题 4.RockMQ从入门到实战 5.图解操作系统 6....
java 斐波拉契数列递归超详细图解