快速排序基本思想、实例讲解及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%的人还看了以下文章

  • itbegin编程教学云课堂使用介绍

    进入https://www.itbegin.com/apps    点击右上角 登录 登录后,点击院校通–院校 点击进入个人中心 点击“web开发技术课堂”,进入相应课程 点击:我的预习,可以看到预习的知识点,时间要求。请同学们一定要在结束时间前完成任务! 点击查看,可以看到需要预习的知识点,预习以观察,查看效果为主。 如要求:观察各标签的使用及…

    2018年3月14日
    7.8K0
  • 什么是 Python ?Python 有哪些优势?为什么学 Python ?

    Python 是一种通用的脚本开发语言,比其他编程语言更加简单、易学,其面向对象特性甚至比 Java、C#、.NET 更加彻底,因此非常适合快速开发。Python 在软件质量控制、开发效率、可移植性、组件集成、库支持等方面均处于先进地位。

    2018年10月18日 编程开发
    7.4K1
  • HTML5- Canvas入门(一)画线

    canvas是一个H5的标签: <canvas> </canvas> canvas本身没有任何的绘图能力,所有的绘图工作都是通过js来实现的。通常我们在js通过getElementById来获取要操作的canvas(这意味着咱得给canvas设个id): <canvas id=”myCanvas”></canvas&…

    2022年7月9日
    5.5K0
  • 第一课:maven是什么,为什么使用Maven?

    maven是一款服务于java平台的自动化构建工具。

    2023年1月27日
    2.8K0
  • 详解如何在myeclipse中运行JSP,Run As none applicable(图)

    在MyEclipse中打开JAVA Project时想运行单个JAVA文件,如Hello.java文件,可以在Hello.java右键Run As 后面出现java Application,点击即可运行。 在myEclipse中打开web project,想运行单个JSP文件或项目,在jsp文件上右键Run As 没有”run on server…

    2020年2月23日
    22.7K0
  • jsp日期控件lhgcalendar下载

    资源类别:编程开发软件大小:377KB推荐等级:★★★★★资源语言:简体中文授权方式:免费版软件属性:国产软件应用平台:Win9X,Win2000,WinXP,Win2003,Vista,Unix,Linux lhgcalendar简介 非常好用的JSP日历控件,功能强大。可以实现: 1. 在控件下面或右面弹出日历组件(默认是在下面弹出) 2. 通过按钮或图…

    2019年10月8日
    3.6K0

发表回复

登录后才能评论