快速排序之Java实现

代码:

  1 package cn.com.zfc.lesson21.sort;
  2
  3 /**
  4  *
  5  * @title QuickSort
  6  * @describe 快速排序
  7  * @author 张富昌
  8  * @date 2016年10月2日下午2:45:37
  9  */
 10 public class QuickSort {
 11     // 快速排序是平均时间最快的排序算法。
 12     // 基本思想:任选待排序列中的一个数据元素(通常选取第一个数据元素)作为枢轴,用它和所有的剩余元素进行比较,将所有较它小的元素排在它的前面;
 13     // 将所有较它大的元素排在它的后面,经过一趟排序后,可按次数据元素所在位置为界,将可序列化分成两个部分;
 14     // 再对这两个部分重复上述过程直至每一个部分中只剩下一个数据元素为止。
 15
 16     public static void main(String[] args) {
 17         // 声明整型数组
 18         int[] array = new int[10];
 19         // 使用循环和随机数初始化数组
 20         for (int i = 0; i < array.length; i++) {
 21             array[i] = (int) Math.round(Math.random() * 100);
 22         }
 23         System.out.println("原始数组为:");
 24         for (int i : array) {
 25             System.out.print(i + " ");
 26         }
 27         System.out.println();
 28         System.out.println("排序后的数组为:");
 29         for (int i : quickSort(array)) {
 30             System.out.print(i + " ");
 31         }
 32     }
 33
 34     /**
 35      *
 36      * 功能:对数组进行快速排序,并且返回该数组
 37      *
 38      * 参数:int[] arr
 39      *
 40      * 返回类型:int[]
 41      */
 42     public static int[] quickSort(int[] arr) {
 43         quickSortHelp(arr, 0, arr.length - 1);
 44         return arr;
 45     }
 46
 47     /**
 48      *
 49      * 功能:对数组 arr[low...high] 中的记录进行快速排序
 50      *
 51      * 参数:int[] arr, int low, int high
 52      *
 53      * 返回类型:void
 54      */
 55     public static void quickSortHelp(int[] arr, int low, int high) {
 56         if (low < high) {
 57             // 子序列 elem[low...high] 的长度大于 1
 58             int pivotLoc = partition(arr, low, high);
 59             // 对子序列 arr[low...pivotLoc-1] 递归排序
 60             quickSortHelp(arr, low, pivotLoc - 1);
 61             // 对子序列 arr[pivotLoc+1...high] 递归排序
 62             quickSortHelp(arr, pivotLoc + 1, high);
 63         }
 64     }
 65
 66     /**
 67      *
 68      * 功能:使枢轴元移到正确的位置,要求枢轴左边的元素不大于枢轴,枢轴右边的元素不小于枢轴,并返回枢轴的位置
 69      *
 70      * 参数:int[] arr, int low,int high
 71      *
 72      * 返回类型:int
 73      */
 74     public static int partition(int[] arr, int low, int high) {
 75         while (low < high) {
 76             // arr[low] 为枢轴,使 low左边的元素不大于 elem[high]
 77             while (low < high && arr[low] <= arr[high]) {
 78                 high--;
 79             }
 80             // 交换 arr[low] 和 arr[high]的值
 81             swap(arr, low, high);
 82             // arr[high] 为枢轴,使 low 左边的元素不大于 arr[high]
 83             while (low < high && arr[low] <= arr[high]) {
 84                 low++;
 85             }
 86             // 交换 arr[low]和 arr[high]的值
 87             swap(arr, low, high);
 88         }
 89         // 返回枢轴的位置
 90         return low;
 91     }
 92
 93     /**
 94      *
 95      * 功能:交换两个数的值
 96      *
 97      * 参数:int x,int y
 98      *
 99      * 返回类型:void
100      */
101     public static void swap(int[] arr, int i, int j) {
102         int temp = arr[i];
103         arr[i] = arr[j];
104         arr[j] = temp;
105     }
106 }

运行结果:

转载于:https://www.cnblogs.com/zfc-java/p/7941078.html

快速排序之Java实现相关推荐

  1. 快速排序算法 java 实现

    快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...

  2. 《啊哈!算法》第一章 - 第三节 - 快速排序(Java实现)

    <啊哈!算法>第一章 - 第三节 - 快速排序(Java实现) 快速排序 升序排序 降序排序 快速排序 举个例子: 对 6 1 2 7 9 3 4 5 10 8 这 10 个数进行排序 首 ...

  3. java 概率 算法_使用概率算法优化快速排序(JAVA)

    前言 前面一篇文章系统介绍了快速排序算法,提到快速排序虽然平均时间复杂度为o(n*log2(n)),效率相对比较高.但是其在特殊情况下,比如降序的情况下,效率和冒泡排序一致,这就削弱了快速排序给人的好 ...

  4. 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现) .

    http://blog.csdn.net/pzhtpf/article/details/7560294 5.冒泡排序 (1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相 ...

  5. 快速排序 java导包_排序算法-快速排序(Java实现)

    上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,"快速",一看就是个好算法~ 快速排序(QuickSort)是啥? 我们先看下百度百科的介绍快速排序(Quicksort)是对冒 ...

  6. java快速排序代码6_分分钟掌握快速排序(Java / Scala 实现)

    今天我们来学习一种不浪费空间.效率还非常高的排序算法--快速排序. 算法思想 快速排序的基本思想--分治法. 1. 选取基准数(pivot):选数组中的第一个或者中间一个. 2. 分区:将数组中比基准 ...

  7. 排序算法java快速排序_快速排序算法--Java实现

    标签(空格分隔): 数据结构与算法 原理: 对于任意一个无序数组,我们随机的选一个元素作为基准元素(例如:数组中的最后一个或者第一个元素, 然后我们将数组中的剩余元素分别与基准元素进行比较,将小于或等 ...

  8. 排序之快速排序的java语言简单实现

    快速排序应该是排序算法里面经典里的经典了,在上两周美图手机的现场笔试中有一道编程题居然是现场默写排序算法(当然我那时全忘了,毕竟我平时最常用的排序算法是java里面的Arrays.sort()). 快 ...

  9. 快速排序(Java递归实现)

    快速排序: 在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列另一边,从而把数列拆解成两个部分. 代码实现: 基于双边循环法实现的快速排序,代码使用了递归的方式. i ...

最新文章

  1. find 按时间查找
  2. python type创建类_Python基于内置函数type创建新类型
  3. 如何修改linux时间? 校正linux系统的时间
  4. postman 抓包工具charles的使用
  5. 解决Qt创建项目后只有.pro文件问题
  6. python读取文件夹下特定的文件_python os模块获取指定文件夹下所有文件名
  7. java给定任意_java生成任意整数随机数(任意指定范围)
  8. 前端学习(2789):改进导航栏并跳转
  9. centos下如何使用sendmail发送邮件
  10. SpringJDBC解析3-回调函数(update为例)
  11. angular 引入编辑器遇到的各种问题。。。
  12. 对一个存储过程语法的解读
  13. 将三个数按从大到小输出
  14. CSS显示属性上的过渡
  15. Navicat Premium查看建表语句(DDL)
  16. 2015年1月c语言程序设 第二版,2015年电大1253+C语言程序设计A(2010年1月)小抄参考.doc...
  17. 解决VS2015无法打开WinSock2.h,无法找到ws2_32.lib
  18. 数字电子技术基础知识点总结_数字电子技术课程线上授课一周之感想 ——信息与控制学院 电工基础教研室 李姿...
  19. VIP视频会员,无限制看剧对人的自制力,产生了严重的考验和折磨
  20. vios配置的自动采集_VIOS共享存储池和精简配置

热门文章

  1. jQuery Layer 弹层组件
  2. 转载 python扩展问题”unable to find vcvarsall.bat“的解决
  3. 利用cheat engine以及VC编写游戏修改器
  4. 算法学习:后缀数组 height的求取
  5. 关于Map迭代循环,key和value的顺序问题
  6. HDU - 4858 项目管理
  7. 冷知识 —— 成语与典故
  8. MariaDB 源码调试
  9. 【安装MongoDB】CentOS7 下安装NodeJs+Express+MongoDB+Redis
  10. Sublime Text2 常用快捷键