package _0817;
import java.util.Random;
/**
* @param args
* 排序的方法有:插入排序(直接插入排序、希尔排序)、交换排序(冒泡排序、交换排序)、选择排序(直接选择排序、
* 堆排序)、归并排序、分配排序(箱排序、基数排序)
*
* 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。
* 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比
* 另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,
* 以此达到整个数据变成有序序列。
*
* 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,
* 然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
* 一趟快速排序的算法是:
* 1)设置两个变量I、J,排序开始的时候:I=0,J=N-1;
* 2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];
* 3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于key的值A[J],并与A[I]交换;
* 4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于key的A[I],与A[J]交换;
* 5)重复第3、4、5步,直到 I=J; (3,4步是在程序中没找到时候j=j-1,i=i+1。
* 找到并交换的时候i, j指针位置不变。另外当i=j这过程一定正好是i+或j+完成的最后另循环结束)
*/
public class QuickSort {
public static void main(String[] args) {
Random random = new Random();
int[] pData = new int[10];
for (int i = 0; i < pData.length; i++) {
// 随机生成10个排序数
Integer a = random.nextInt(100);
pData[i] = a;
System.out.print(pData[i] + ",");
}
System.out.println();
int left = 0;
int right = pData.length - 1;
Sort(pData, left, right);
for (int i = 0; i < pData.length; i++) {
System.out.print(pData[i] + ",");
}
System.out.println();
}
public static int[] Sort(int[] pData, int left, int right) {
int middle, strTemp;
int i = left;
int j = right;
middle = pData[(left + right) / 2];
do {
while ((pData[i] < middle) && (i < right))
i++;
while ((pData[j] > middle) && (j > left))
j--;
if (i <= j) {
strTemp = pData[i];
pData[i] = pData[j];
pData[j] = strTemp;
i++;
j--;
}
for (int k = 0; k < pData.length; k++) {
System.out.print(pData[k] + ",");
}
System.out.println();
} while (i < j);// 如果两边扫描的下标交错,完成一次排序
if (left < j)
Sort(pData, left, j); // 递归调用
if (right > i)
Sort(pData, i, right); // 递归调用
return pData;
}
}
分享到:
相关推荐
6. **算法**:包括排序算法(冒泡排序、快速排序等)、搜索算法(线性搜索、二分搜索等),以及递归、动态规划等高级算法。 7. **文件操作**:学习如何读写文件,理解文件流,以及处理文件路径和异常。 8. **面向...
在IT行业中,编程题目和算法是衡量一个开发者技术能力的重要标准,尤其对于那些希望进入大厂工作的求职者来说,这是必须掌握的知识点。本压缩包文件"python-algorithm-master"显然是一个专注于Python算法的资源集合...
参赛者需要阅读这份文档,理解题目要求,然后设计并实现一个解决方案。 在解决Google编程大赛题目时,参赛者可能会遇到以下常见的知识点: - **算法设计**:包括排序算法(如快速排序、归并排序)、搜索算法(如二...
- 在本题目中,可以通过简单的冒泡排序或者更高效的快速排序等方式对字母频率进行降序排列。 5. **模块化设计**: - 模块化设计是指将一个复杂的问题分解成若干个子问题,每个子问题由一个独立的模块解决。 - 本...
常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。不同排序算法的效率和适用场景各有不同。 2. 冒泡排序: 冒泡排序算法的基本思想是通过重复地交换相邻的元素,如果它们的顺序错误,从而将...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R....快速排序由于其高效性和广泛的应用,是编程学习中的经典算法之一,也是许多面试中考察的热门题目。理解并能够实现快速排序,对于提升编程能力大有裨益。
例如,编写一个程序,实现数组的排序(冒泡排序、快速排序等),或者利用指针进行字符串操作。 5. 结构体与联合: 结构体和联合允许我们创建复合数据类型,这在处理复杂的数据结构时非常有用。通过题目,可以学习...
4. **数学问题**:很多编程题目涉及到数学知识,如数论(质数、最大公约数、最小公倍数)、组合数学、概率、线性代数等。良好的数学基础能帮助你更深入地理解和解决问题。 5. **递归与回溯**:在解决一些复杂问题时...
2. **算法与数据结构**:编程题目往往涉及到排序、查找、图论、动态规划等经典算法,以及链表、树、队列、栈等数据结构的运用。 3. **问题解决策略**:通过解题,读者可以学习如何分析问题、设计解决方案,以及如何...
快速排序则采用分治策略,选取一个基准元素,将数组分为小于基准和大于基准两部分,然后对这两部分递归地进行排序。堆排序利用了二叉堆的性质,构建最大(或最小)堆进行排序。归并排序则是将数组分割成小段,分别...
内容概要:本文档《数据结构代码题备考.pdf》涵盖了多类数据结构相关的考试题目及其解答方法,包括快速排序(含具体算法实现与多个历年真题案例)、二路归并排序、链表、图的表示形式(邻接矩阵和邻接表)以及多种...
标题 "2009国际编程大赛题目" 涉及的是一个编程竞赛的历年试题集,这通常包含一系列挑战性的编程问题,旨在测试参赛者的算法设计、数据结构掌握以及问题解决能力。这样的比赛有助于提升程序员的逻辑思维和编程技巧,...
北航OJ(编程啦)是一个在线编程训练平台,提供了大量的编程题目供用户练习和提升编程能力。这里的“源代码”是指用户在解决这些题目时编写的程序代码,通常包括C++, Java, Python等常见编程语言。这个压缩包文件...
南京理工大学计算机学院的复试上机编程题目是针对计算机科学与技术、软件工程等相关专业研究生入学考试的一个重要环节。这类题目通常旨在考核考生的基础编程能力、算法理解与应用、问题解决和逻辑思维等核心技能。...
"排序(java 面试编程).zip"这个压缩包中包含了一个名为"Sortor.java"的源代码文件和一个"题目.txt"的文本文件,用于实现对输入的数字进行升序或降序排序的功能。下面将详细解释相关知识点。 1. **排序算法**:排序...
参赛者需要在限定的时间内完成一系列编程题目,这些题目通常涉及到排序、搜索、图论、动态规划等经典算法。 在历年的编程大题中,你可以期待遇到以下几种类型的题目: 1. **基础编程**:包括输入输出处理、循环与...
快速排序的核心思想是通过选取一个基准值,将待排序的序列分为两个部分,使得一部分的所有元素都小于基准值,另一部分的所有元素都大于基准值,然后递归地对这两部分进行快速排序。 快速排序的步骤如下: 1. **...
它的核心思想是分治策略,选取一个基准值,将数组分为两部分,一部分所有元素小于基准,另一部分所有元素大于基准,然后对这两部分递归地进行快速排序。 4. **树数据结构**:树是一种非线性数据结构,由节点(或...
介绍: 该资源详细介绍了如何使用Python语言实现快速排序算法(Quick Sort)。快速排序是一种高效的...面试准备:对于准备参加技术面试的候选人,快速排序算法是一个常见的面试题目,本资源可以帮助候选人复习和准备。
这份"java笔试题目及编程题目"资源旨在帮助Java学习者提升技能,覆盖了从初级到高级的各类面试题目。 首先,基础篇的面试题集通常会涵盖以下知识点: 1. **Java语法基础**:这包括变量声明、数据类型(如基本类型...