快速排序基本思想、实例讲解及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程序——输出HelloWorld并运行

    上一章节我们讲解了Python开发环境搭建,今天学习使用 Eclipse编写第一个Python程序——输出HelloWorld并运行。 1.打开Eclipse,选择File——》New——》Other。在弹出的New窗口中,选择Pydev——》Pydev Project——》next。 2.在弹出的窗口中,依次填写Project name(工程名)——》Di…

    2019年6月24日 编程开发
    6.6K0
  • 推荐!学Python编程买什么样的电脑?(电脑配置清单)

    推荐购买台式机,性价比高于笔记本电脑。 当然对不差钱的可以买笔记本电脑,毕竟方便携带。 对于笔记本电脑: 推荐购买标准电压CPU的电脑(例如:第12代i7-12700H),H表示标准电压。 内存建议16G或以上 C盘建议固态硬盘256g以上 D盘建议1T以上(建议采用”内置“”固态硬盘+机械硬盘“的计算机,固态硬盘速度极快,用于运行系统和软件,机械硬盘空间大…

    2023年1月26日 编程开发
    8.6K0
  • 5分钟快速入门AJAX

    什么是AJAX? 第一步:如何发出一个HTTP请求第二步:处理服务器的响应第三步:一个简单的例子第四步:与XML响应协同工作 什么是AJAX AJAX是一个新的合成术语,隐含了两个已经存在多年的JavaScript特性,但是直到最近,随着一些诸如Gmail、Google Suggest以及Google Maps的轰动,才被许多网络开发者所注意到。 我们所讨论…

    2020年4月4日
    4.3K0
  • python属于编译型还是解释型的语言?python是哪一种类型的编译语言

    Python先把代码编译成字节码,再对字节码解释执行。 java   编译型(请求次数多)+解释型(请求次数少) 解释性语言定义: 程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。 现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行…

    2023年2月26日
    5.6K0
  • idea不识别@webServlet注解,javax.servlet.htttp 找不到的解决方法

    在servlet3.0以后,web.xml中对Servlet配置,可以通过@WebServlet注解配置.下面是@WebServlet的属性列表: 属性名 类型 描述 name String 指定Servlet 的 name 属性,等价于 <servlet-name>。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。 value …

    2020年8月22日 编程开发
    17.8K0
  • 什么是 Python ?Python 有哪些优势?为什么学 Python ?

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

    2018年10月18日 编程开发
    5.9K1

发表回复

登录后才能评论