文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

快速排序(Quicksort)是对冒泡排序的一种改进。

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

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

第一种实现

package Sort;import java.util.Arrays;/**
*类描述:二分查找的精髓在于控制循环的次数,进行遍历
*@author: 张宇
*@date: 日期: 2018年8月20日 时间: 上午10:31:45
*@version 1.0*/public class QuickSort {public static void main(String []args){int[] arrs = {12,20,5,16,15,1,30,45,23,9};       quickSort(arrs,0,arrs.length-1);System.out.println(Arrays.toString(arrs));} //快速排序,递归算法private static void quickSort(int[] arr, int low, int high) {int start = low;int end = high;int key = arr[start];while (start < end) {// 要从尾到前面进行比较while (start < end && arr[end] >= key) {end--;}if (arr[end] <= key) {int temp = arr[end];arr[end] = arr[start];arr[start] = temp;}// 要从前到后进行比较while (start < end && arr[start] <= key) {start++;}if (arr[start] >= key) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;}}if (start > low) {quickSort(arr, low, start - 1);}if (end < high) {quickSort(arr, end + 1, high);}}
}

时间复杂度:O(n*logn)

空间复杂度:O(n)


第二种实现

 // 快速排序的设计思路2private void quickSort2(int[] arr, int low, int high) {int start = low;int end = high;int key = arr[start];while (start != end) {while (start < end && key <= arr[end]) {end--;}while (start < end && key >= arr[start]) {start++;}if (start != end)swap(arr, start, end);}swap(arr, start, low);if (start > low) {quickSort2(arr, low, start - 1);}if (end < high) {quickSort2(arr, end + 1, high);}}

时间复杂度:O(n*logn)

空间复杂度:O(n)


源码github地址

https://github.com/zhangyu345293721/leetcode

LeetCode:快速排序相关推荐

  1. Leetcode——快速排序

    题目描述: 给你一个整数数组 nums,请你将该数组升序排列. 个人思路: 我们先来说一下快速排序的基本思想. 先从数组中找一个基准数 让其他比它大的元素移动到数列一边,比他小的元素移动到数列另一边, ...

  2. java nodelist 快速排序,【Leetcode】Sort List in java,你绝对想不到我是怎么做的^^我写完过了我自己都觉得好jian~...

    Sort a linked list inO(nlogn) time using constant space complexity. 大家看完题目估计跟我一样啦...都在想哪些是nlogn啊~快速排 ...

  3. 【编程4】插入排序+快速排序+LeetCode.148(排序链表)

    文章目录 一.排序链表 1.题目描述--LeetCode.148 2.分析 (1)一般的快排 (2)解题思路 3.实现 二.排序算法 三.插入排序 1.基本思想 (1)过程概述 (2)具体算法描述: ...

  4. 【Leetcode】大神总结的所有TopK问题模板(基于快速排序)

    基本思想 通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序. 实现原理 整个数组找基准正确位置,所有元素比 ...

  5. leetcode 75. Sort Colors | 75. 颜色分类(荷兰国旗问题,快速排序)

    题目 https://leetcode.com/problems/sort-colors/ 题解 快速排序3.0(随机快排+荷兰国旗技巧优化) 在arr[L-R]范围上,进行快速排序的过程: 1)在这 ...

  6. LeetCode 148. 排序链表(归并排序、快速排序)

    文章目录 1. 题目 2. 解题 2.1 归并排序 2.2 快速排序 1. 题目 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序. 示例 1:输入: 4->2-> ...

  7. LeetCode.数组中的第k个最大的元素(基于快速排序的选择排序算法)

    题目描述:来自LeetCode 思路:快速排序的时间复杂度是O(NlogN),但是基于快速排序的选择排序算时间复杂度只有O(N).快速排序:就是找到一个枢轴,将枢轴左边比枢轴大的数都移动到枢轴右边,枢 ...

  8. LeetCode 215. 数组中的第K个最大元素(快速排序)

    1. 题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 ...

  9. 【leetcode】324.摆动排序 II (四种解法,快速排序+3way-partition等,java实现)

    324. 摆动排序 II 难度中等 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1 ...

最新文章

  1. go select 与 for 区别_Go 面试每天一篇(第 102 天)
  2. 报错解决:InvalidArgumentError: Can not squeeze dim[1], expected a dimension of 1, got
  3. reactjs typescript数据传递
  4. 不在JPA 的 persistence.xml 文件里配置Entity class的解决的方法
  5. 【vijos】【二叉树】FBI树
  6. pgsql自动安装shell脚本整理
  7. 怎样使用Pycharm(Python工具)新建项目及创建Python文件
  8. dj电商-数据库的远程连接
  9. 无比乐java游戏_传智播客Java JavaEE+物联网云计算 就业班
  10. 下载配置Gradle
  11. ARKit入门到精通 1.0 - 实战案例 AR打地鼠-史小川-专题视频课程
  12. 掌握c语言的运行环境,c语言考试大纲
  13. staruml 试用_浅析几款主流的UML建模工具
  14. 在线二进制取余计算机,十进制转二进制和十六进制计算器
  15. 【离散数学】命题逻辑 带你快速学完离散数学
  16. 一,EAIDK-310开箱
  17. linux第7章进程状态和控制
  18. Jenkins 打包配置
  19. itext 导出word
  20. java计算机毕业设计智能旅游电子票务系统演示录像2020源码+mysql数据库+系统+部署+lw文档

热门文章

  1. AI作文助手v1.0好头而烦恼吗?
  2. Weblogic12C概述及安装
  3. 数据缺失值补全方法 sklearn.impute.SimpleImputer 使用实例
  4. [ACPI高级配置与电源接口] -ACPI基础
  5. Python编写zip密码破解脚本(超详细)
  6. 房地产---那些事2
  7. 2022年熔化焊接与热切割考题及在线模拟考试
  8. VMware 配置虚拟机固定IP
  9. 02 html5 基础
  10. 1、互联网核心岗位缩写