快速排序基本思想、实例讲解及Java实现代码

文章介绍了快速排序的基本思想、实现步骤和Java实现代码。

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。

快速排序是一种不稳定的排序算法。

快速排序的基本思想是

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

快速排序的实现方法

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

快速排序基本思想、实例讲解及Java实现代码

快速排序Java实现代码

public class QuickSort {
 public static void main(String[] args) {
  int [] array = {49,38,65,97,76,13,27};
  quickSort(array, 0, array.length - 1);
  for (int i = 0; i < array.length; i++) {
   System.out.println(array[i]);
  }
 }
 /*先按照数组为数据原型写出算法,再写出扩展性算法。数组{49,38,65,97,76,13,27}
  * */
 public static void quickSort(int[]n ,int left,int right){
  int pivot;
  if (left < right) {
   //pivot作为枢轴,较之小的元素在左,较之大的元素在右
   pivot = partition(n, left, right);
   //对左右数组递归调用快速排序,直到顺序完全正确
   quickSort(n, left, pivot - 1);
   quickSort(n, pivot + 1, right);
  }
 }
 
 public static int partition(int[]n ,int left,int right){
  int pivotkey = n[left];
  //枢轴选定后永远不变,最终在中间,前小后大
  while (left < right) {
   while (left < right && n[right] >= pivotkey) --right;
   //将比枢轴小的元素移到低端,此时right位相当于空,等待低位比pivotkey大的数补上
   n[left] = n[right];
   while (left < right && n[left] <= pivotkey) ++left;
   //将比枢轴大的元素移到高端,此时left位相当于空,等待高位比pivotkey小的数补上
   n[right] = n[left];
  }
  //当left == right,完成一趟快速排序,此时left位相当于空,等待pivotkey补上
  n[left] = pivotkey;
  return left;
 }
}

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/11175.html

(0)
江山如画的头像江山如画管理团队
上一篇 2022年12月1日 上午10:51
下一篇 2022年12月1日 下午1:48

99%的人还看了以下文章

  • python使用列表生成式生成列表 其元素为100以内所有能被3整除的数

    python : 不使用列表生成式,生成元素为100以内所有能被3整除的数,代码如下: m=[] for i in range(3,100): if (i%3==0): m.append(i) print(m) 使用列表生成式生成列表,其元素为100以内所有能被3整除的数,代码: n=[i for i in range(3,100) if(i%3==0)] …

    2020年1月2日
    99.2K0
  • Ubantu为应用程序添加桌面图标

    按要求配置应用程序参数,为应用程序添加桌面图标,实现系统快捷启动。 Ubuntu桌面的左边(默认在左边)有一个启动器,类似于window的任务栏。在Ubuntu18中叫dock(船坞),有时候又叫收藏夹。本文统一叫做启动器 在使用 Ubuntu 操作系统进行开发过程中,由于Ubuntu 系统其操作方式主要通过命令行终端进行交互,故启动软件也一般通过终端键入应…

    2022年9月1日 编程开发
    6.5K0
  • oracle 计算时间差,包含年、月、日、时、分、秒

    在做系统时,如图书管理系统、车辆管理系统、事务管理系统等,经常需要我们计算两个日期相差多少天,图书是否应该归还,事情是否完成等。 今天给大家分享oracle 中如何计算时间差! oracle时间差是以天数为单位,所以换算成年月,日 select floor(to_number(sysdate-to_date(‘2018-11-02 15:55:03’,’yy…

    2018年2月13日
    4.5K0
  • 图片上传并压缩源码免费下载(等比例压缩或者原尺寸压缩)-java

    项目开发时,需要手机拍照,然后上传图片,因为项目记录数非常多,每条记录需要3张照片,而手机相机越来越好,分辨率也高,就要压缩后再上传。 中国网页设计今天分享的图片上传并压缩方法支持等比例压缩或者原尺寸压缩两种。 可自行设置图片质量参数quality,能够同时处理jpg和png格式,也可把PNG转jpg或jpg转PNG。 宽度和高度可以根据项目实际需求自行设置…

    2019年6月24日
    8.0K0
  • pageEncoding和contentType编码作用和区别详解

    pageEncoding和contentType都用于定义字符编码,两者有什么区别?相信不少初学者都会有疑惑,今天中国网页设计给大家详细解读两者的区别,pageEncoding和contentType都在什么时候起作用。

    2022年12月1日
    1.6K0
  • 全!最详细的mysql新手安装教程

    数据库排名:Oracle,mysql和 Microsoft SQL Server 仍占据前三名。 Mysql是什么? mysql是一个关系型数据库软件,由瑞典MySQL AB公司开发,目前属于Oracle公司。 为什么使用mysql? 1)mysql是开源的,所以你不需要支付额外的费用就能使用。 2)mysql支持大型的数据库。可以处理拥有上千万条记录的大型…

    2023年1月28日 编程开发
    6.1K0

发表回复

登录后才能评论