`
豌豆苗
  • 浏览: 5739 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java完美实现快速排序

阅读更多
java开发者是不需要考虑排序问题的,因为jdk已经提供了现成的排序功能供你调用。但这并不妨碍我们试图用java代码自己实现一个快速排序功能。
public class QuickSort {
public void sort(int a[],int left,int right){
if(left>=right) return;
int i=left, j=right, key=a[i]; //开始时key在i位置
while(i<j){
for(; i<j; j--){
if(a[j]<key) { a[i]=a[j]; a[j]=key; break; } //key交换到了j位置
}
for(; i<j ;i++){
if(a[i]>key) { a[j]=a[i]; a[i]=key; break; } //key交换到了i位置
}
} //while循环结束后,i=j,并且key就被交换到了这个正确的位置
sort(a,left,i-1); //i位置左边排序
sort(a,i+1,right); //i位置右边排序
}
public static void main(String[] stra){
int a[]={3,4,5,8,7,6,1,2,9,5};
QuickSort qs = new QuickSort();
qs.sort(a,0,a.length-1);
for (int i=0;i<a.length;i++) {System.out.println(a[i]);}
}
}

  设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。   
一趟快速排序的算法是:   
1)设置两个变量I、J,排序开始的时候:I=0,J=N-1;   
2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];   
3)从J开始向前搜索,即由后开始向前搜索(J=J-1即J--),找到第一个小于key的值A[j],A[j]与A[i]交换;   
4)从I开始向后搜索,即由前开始向后搜索(I=I+1即I++),找到第一个大于key的A[i],A[i]与A[j]交换;   
5)重复第3、4、5步,直到 I=J; (3,4步是在程序中没找到时候j=j-1,i=i+1,直至找到为止。找到并交换的时候i, j指针位置不变。另外当i=j这过程一定正好是i+或j-完成的最后另循环结束。)
0
0
分享到:
评论

相关推荐

    数据结构经典算法Java完美实现

    "数据结构经典算法Java完美实现"是一个专为Java开发者设计的学习资源,旨在帮助他们深入理解并掌握数据结构和算法在Java中的应用。 首先,数据结构是存储和组织数据的方式,它决定了我们如何在程序中管理和操作数据...

    164个JAVA完美程序

    也可能涵盖经典的算法,如排序(快速排序、归并排序、冒泡排序等)、查找(二分查找、哈希查找)等。这些程序通常会遵循良好的编程实践,比如面向对象设计原则,以及使用Java标准库。 "很多经典算法"提示了这个...

    经典算法(C&JAVA实现)

    快速排序法(一) 快速排序法(二) 快速排序法(三) 合併排序法 基數排序法 循序搜尋法(使用衛兵) 二分搜尋法(搜尋原則的代表) 插補搜尋法 費氏搜尋法 稀疏矩陣 多維矩陣轉一維矩陣 上三角、下...

    基于Java的论坛系统,前端Html+CSS+JS实现,后端Java实现,Eclipse完美运行!

    基于Java的论坛系统,前端使用Html+CSS+JS实现,后端使用Java语言开发,技术栈包括但不...4、排行榜:排行榜是通过Redis的有序集合来实现的,可以快速实现topK排序。 5、关注和共同关注:通过Redis的集合数据结构实现。

    java交换排序之奇偶排序实现方法

    总的来说,奇偶排序是一种易于理解和实现的排序算法,尤其适用于并行计算环境,但考虑到其时间复杂度较高,实际应用中可能需要考虑更高效的排序算法,例如快速排序、归并排序或堆排序等。尽管如此,奇偶排序作为一个...

    经典常用算法(含代码)

    经典常用算法解析与实现,通过Java C语言分别实现各种算法,图文并茂,描述很详细! 主要包括如下算法,很全面! 河内塔 费式数列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 骑士走棋盘 八个...

    Java和C语言实现各种经典算法(含代码图例)

    Java和C语言实现各种经典算法(含代码图例) 老掉牙 河内塔 费式数列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 骑士走棋盘 八个皇后 八枚银币 生命游戏 字串核对 双色、三色河内塔 背包...

    Java音视屏播放器绝对完美版zip

    总的来说,"Java音视屏播放器绝对完美版"是一个集成了VLC的强大功能,具备丰富播放控制的Java应用程序。通过学习和实践这个项目,开发者可以加深对Java GUI编程的理解,同时增强在多媒体领域的应用能力。无论是个人...

    ACCP6.0JAVA迷你DVD管理器完美版

    《ACCP6.0 JAVA迷你DVD管理器完美版》是一个专为初级JAVA程序员设计的项目,旨在帮助用户高效地管理和组织他们的DVD收藏。这个管理器不仅提供了基础的DVD信息存储功能,还通过精心设计的界面和用户体验实现了对DVD的...

    java小程序源代码集合

    这些程序涵盖了Java的基础到高级应用,可能包括排序算法(如快速排序、归并排序)、数据结构(如栈、队列、链表、树)、设计模式、图形界面开发、网络编程、文件操作等多个方面。通过分析和学习这些程序,可以加深...

    JAVA上百实例源码以及开源项目源代码

    Java实现的FTP连接与数据浏览程序 1个目标文件 摘要:Java源码,网络相关,FTP Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 ...

    Java教科書

    Think In Java 4(完美高清中文版)** 《Thinking in Java》是一本经典的Java学习书籍,作者Bruce Eckel。第四版通常会包含Java的最新特性,如泛型、枚举、注解等,强调面向对象编程的思想。这本书通过实例教学,...

    《设计模式与游戏完美开发》java demo.zip

    《设计模式与游戏完美开发》java demo.zip是一个包含Java编程语言实现的小游戏项目的压缩包,旨在为学习者提供一个实际的、可运行的游戏开发示例。这个项目不仅展示了Java编程的基础,还融入了设计模式的概念,使...

    完美世界面试题,JAVA向

    - 快速排序 - 归并排序 - 堆排序 5. 对以下二叉树进行前序遍历(根-左-右)的结果是:1 2 3 4 5 二、选择题 1. for(int x=0,y=0; y|| !x;y++,x++) 语句执行循环的次数是无限次,因为当 x=1 时,!x 为 false,...

    auc_java_AUC_置信度_分类算法_预测_

    在Java中,可以使用排序算法,如快速排序或归并排序,对预测概率进行排序,然后计算累积分布函数(CDF)以获得AUC值。 置信度在分类预测中通常指的是模型预测的概率分数,即模型认为样本属于某一类别的概率。在二...

    最小完美哈希查找,源代码

    在本文中,我们将深入探讨最小完美哈希函数的概念、其在实际应用中的重要性,以及如何通过源代码实现O(1)查找时间和1的负载因子。 最小完美哈希函数(Minimum Perfect Hash Function,MPHF)的目标是将一组不重复的...

    JAVA面试笔试题大全(完美版)

    - **排序算法**:冒泡、插入、选择、快速、归并、堆排序等。 - **查找算法**:顺序、二分查找等。 - **复杂度分析**:掌握时间复杂度和空间复杂度的概念,能够分析算法效率。 5. **框架** - **Spring框架**:...

    Java经典程序100个例子!让你零基础作出不错的程序。初学、入门、毕设课设都能用

    同时,排序和查找算法,如冒泡排序、快速排序、二分查找等,也是你应该熟练掌握的。 对于毕业设计或课程设计,你可能需要构建更复杂的系统。这可能涉及到多线程编程,用于实现并发处理,或者是使用设计模式来解决...

    基于Java MySQL实现高校研究生学术成果量化管理系统【优质毕业设计、课程设计项目】.zip

    配置环境说明可能包括了Java开发环境(如JDK)、集成开发环境(如IntelliJ IDEA或Eclipse)、构建工具(如Maven或Gradle)、服务器(如Tomcat)以及MySQL数据库的安装和配置步骤,帮助开发者快速搭建运行环境。...

Global site tag (gtag.js) - Google Analytics