首页 > 编程语言 >算法之快速排序1初始(java)

算法之快速排序1初始(java)

时间:2023-12-02 18:33:05浏览次数:48  
标签:java 数列 元素 一轮 冒泡排序 算法 排序 快速

一:概述

快速排序、归并排序、堆排序等都是比冒泡排序更快的算法。其中快速排序是从冒泡排序演变而来。

快速排序之所以比冒泡排序要快是因为它用了分治法。

      


二:具体说明

同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较进行比较和交换位置来达到排序的目的。

不同的是,冒泡排序在每一轮中只把一个元素冒泡到数列的一端,而快速排序则在每一轮挑选一个基准元素,并让其把比它的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成两个部分。

算法之快速排序1初始(java)_快速排序

上图这种思路就是分治法

每次把数列分成两部分,好处就是:

假如给出一个8个元素的数列,一般情况下,使用冒泡排序需要比较7轮,每一轮把1个元素移动到数列的一端,时间复杂度是O(n^2)。

快速排序的流程如下:

算法之快速排序1初始(java)_时间复杂度_02

如图所示,在分治法的思想下,原数列在每一轮都被拆分成两部分,每一部分在下一轮又被拆分成两个部分,直到不能拆分为止。

每一轮的比较和交换,需要把数组全部元素都遍历一遍,时间复杂度是O(n).这样的遍历:假如元素的个数为n,则平均情况下需要logn轮,因此快速排序算法总体的平均时间复杂度是O(nlogn).

快速排序的核心问题是基准元素的选择和元素的交换。













































































标签:java,数列,元素,一轮,冒泡排序,算法,排序,快速
From: https://blog.51cto.com/u_15912723/8658368

相关文章

  • 【算法 Java】递归,阶乘的递归实现,斐波那契数列的递归实现
    递归定义:方法直接或间接地调用方法本身思路:将大问题转化为一个与原问题相似的规模更小的问题注意:递归死循环会导致栈内存溢出一些使用递归求解的问题阶乘Factorial.javaimportjava.util.Scanner;publicclassFactorial{publicstaticvoidmain(String[]args)......
  • java: 未报告的异常错误java.io.UnsupportedEncodingException; 必须对其进行捕获或声
    原问题代码:/**MD5编码相关的类@authorwangjingtao*/publicclassMD5{//首先初始化一个字符数组,用来存放每个16进制字符privatestaticfinalchar[]hexDigits={'0','1','2','3','4','5','6','7'......
  • 前端学习-JavaScript学习-js基础-API02-轮播图案例
    自己写的<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......
  • Java入门
    Java入门 Java帝国的诞生一场旷日持久的战争(1995)1972年C语言开始统治贴近硬件,运行极快,效率极高早期开发了很多操作系统,编译器,数据库,网络系统等指针和内存管理1982年C++诞生面向对象兼容C图形领域、游戏等我们要建立一个新的语言:语法有点像C没......
  • 【JavaSE】时间API
    JDK8版本之前的时间API(了解)Data类SimpleDateFormat类SimpleDateFormat类指定格式查API帮助文档即可SimpleDateFormatDemo.javaimportjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassSimpleDateFormatDemo{pu......
  • 【教3妹学编程-算法题】统计子串中的唯一字符
    3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包”2哥 :3妹,什么事呀这么开发。3妹:2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。2哥:是啊,立冬之后天气多以多云为主,好不容易艳阳高照。可是你不能秋游,赶紧收拾收拾上班去啦3妹:哼,好吧~2哥:给你出了一道题......
  • 学习笔记4:JavaSE & API(网络编程 & 多线程)
    1、java.net.Socket:(1)定义:Socket(套接字)封装了TCP协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过它获取两个流(一个输入一个输出),然后使用这两个流的读写操作完成与服务端的数据交互。(2)方法getInputStream():获取输入流,返回值是InputStream的一个子类实例。ge......
  • Java 初识
    Java初识一、三大版本:writeonce、runanywhere.JavaSE(核心):标准版(桌面程序,控制台开开)JavaME:嵌入式开发(手机,小家电)JavaEE:企业级开发(web端,服务器开发)二、JDK,JRE,JVMJDK:javadevelopmentkitJRE:javaruntimeenvironmentJVM:javavirtualmachine三、Java开发......
  • 快速排序
    #include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct{intNO;intAge;charName[50];}Student;typedefstruct{intStudentCount;Student*data;}Sqlist;intPartition(Sqlist&L,intlow,int......
  • 选择排序
    #include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct{intNO;intAge;charName[50];}Student;typedefstruct{intStudentCount;Student*data;}Sqlist;voidSelectSort(Sqlist&L){in......