2019独角兽企业重金招聘Python工程师标准>>>

基本思想是:通过一趟排序将待排序记录分成独立的两部分,其中一部分的关键字均比另一部分的关键字小,再分别对这两部分进行排序。

(1)将数组分成左右两部分

(2)递归调用自身对左右两部分排序

 public void recQuickSort(int left,int right){int partition = partitionIt(left,right);recQuickSort(left,partition-1);recQuickSort(partition+1,right);}
 package Structure;class ArrayIns{private long[] theArray;private int nElems;public ArrayIns(int max){theArray = new long[max];nElems = 0;}public void insert(long value){theArray[nElems] = value;nElems++;}public void display(){System.out.print("A=");for(int j=0;j<nElems;j++){System.out.print(theArray[j] + " ");//System.out.println("");}}public void quickSort(){recQuickSort(0,nElems-1);}public void recQuickSort(int left,int right){int size = right-left+1;if(size<=3)manualSort(left,right);else{long medium = medianOf3(left,right);int partition = partitionIt(left,right,medium);recQuickSort(left,partition-1);recQuickSort(partition+1,right);}}//三个数据项取中public long medianOf3(int left,int right){int center = (left+right)/2;if(theArray[left]>theArray[center])swap(left,center);if(theArray[left]>theArray[right])swap(left,right);if(theArray[center]>theArray[right])swap(center,right);swap(center,right-1);return theArray[right-1];}public void swap(int dex1,int dex2){long temp = theArray[dex2];theArray[dex2] = theArray[dex1];theArray[dex1] = temp;}public int partitionIt(int left,int right,long pivot){int leftPtr = left;int rightPtr = right - 1;while(true){while(theArray[++leftPtr]<pivot);while(theArray[--rightPtr]>pivot);if(leftPtr>=rightPtr)break;elseswap(leftPtr,rightPtr);}swap(leftPtr,right-1);return leftPtr;}//对只有三个或更少数数据项数组进行排序public void manualSort(int left,int right){int size = right - left + 1;if(size<=1)return;if(size==2){if(theArray[left]>theArray[right])swap(left,right);return;}else{if(theArray[left]>theArray[right-1])swap(left,right-1);if(theArray[left]>theArray[right])swap(left,right);if(theArray[right-1]>theArray[right])swap(right-1,right);}}
}
public class QuickSort3 {public static void main(String[] args){int maxSize = 16;ArrayIns arr;arr = new ArrayIns(maxSize);for(int j=0;j<maxSize;j++){long n = (int)(java.lang.Math.random()*99);arr.insert(n);}arr.display();arr.quickSort();arr.display();}
}

转载于:https://my.oschina.net/doudoulee/blog/651901

《Java数据结构和算法》Seven 高级排序 快速排序相关推荐

  1. 数据结构与算法之--高级排序:shell排序和快速排序

    高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序大约是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希 ...

  2. 【数据结构与算法】高级排序(希尔排序、归并排序、快速排序)完整思路,并用代码封装排序函数

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  3. 【Java数据结构与算法】第八章 快速排序、归并排序和基数排序

    第八章 快速排序.归并排序和基数排序 文章目录 第八章 快速排序.归并排序和基数排序 一.快速排序 1.基本介绍 2.代码实现 二.归并排序 1.基本介绍 2.代码实现 三.基数排序 1.基本介绍 2 ...

  4. Java数据结构与算法(六) 希尔排序

    ###一.希尔排序的产生 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提 ...

  5. Java数据结构与算法(二) 简单排序

    #####1.冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重 ...

  6. 【数据结构与算法】高级排序

  7. 【笔记】Java数据结构与算法

    [笔记]Java数据结构与算法 文章目录 [笔记]Java数据结构与算法 1.八大排序应用场景 2.未完待续-- 1.八大排序应用场景 冒泡排序:优化后的冒泡排序可用于当数据已经基本有序,且数据量较小 ...

  8. Java数据结构和算法(第二版)

    Java数据结构和算法(第二版) 下载地址 https://pan.baidu.com/s/112D5houIgu0eMs_i5o0Ujw 扫码下面二维码关注公众号回复 100066获取分享码 本书目 ...

  9. 一.Java数据结构与算法:如何开始

    数据结构和算法是计算机科学的核心概念之一,它们在软件开发中起着至关重要的作用.学习Java数据结构和算法不仅有助于提高编程能力,还能让你在面试和职业发展中脱颖而出.本文将为你介绍数据结构和算法的重要性 ...

  10. Java数据结构与算法——插入排序

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...

最新文章

  1. 基于OpenCV的焊件缺陷检测
  2. Codeforces 494D Upgrading Array
  3. Codejock的使用--皮肤
  4. Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解
  5. (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)...
  6. elasticsearch-1.3.0 之索引代码粗略梳理
  7. 尾气冒黑烟是什么问题_烟囱里冒得白烟、黑烟、黄烟有什么危害?
  8. centos7升级gcc,并安装redis
  9. 现在流行「毕业式」裁员吗?
  10. 设置OWA重定向URL
  11. hdu 二分图最大匹配问题 (hdu 1083)
  12. Hibernate中的一级缓存、二级缓存和懒加载
  13. Java SE 12_Frequently-used Class Library(2)
  14. 模拟器桥接模式下 WLAN 无法连接及安卓 7.0+ 无法抓包 HTTPS 的解决
  15. 金华驾驶员考试中心 科目二、科目三和科目四
  16. AI自动剪辑生成视频探索实践
  17. C#中Listobject.Clear()方法和实例化new Listobject()操作的结果分析
  18. 英飞凌TC387在EB环境下的MCAL工程建立
  19. AD域实现统一用户管理
  20. Android常用的音频驱动节点介绍

热门文章

  1. miniui 样式第一次加载不出来_matplotlib--修改样式
  2. java查找一个数等于一组数中哪些数字相加的和_快速入门二分查找
  3. leetcode刷题:不同路径
  4. mysql ibdata1 损坏_mysql innodb文件ibdata1损坏导致mysql无法启动
  5. Spring Security Oauth2 (一) 整体流程介绍
  6. java quartz Scheduler 操作JobDetail
  7. click Documenting Scripts
  8. scrapy crawlspider
  9. docker run
  10. numpy 删除元素