快速排序算法思想及实现
简介
快速排序是对冒泡排序的一种改进,是一种分治算法,时间复杂度为O(nlogn)
基本思想
- 先从数列中取出一个数作为基准数。
- 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
- 再对左右区间重复第二步,直到各区间只有一个数。
Java实现代码
import java.util.Arrays;public class Main {public static void main(String[] args){//测试数据int[] nums = new int[10];for(int i=0;i<10;i++)nums[i] = (int)(Math.random()*100);System.out.println("原数组:");Arrays.stream(nums).forEach(num->{System.out.print(num+" ");});quickSort(nums, 0, nums.length-1);System.out.println("\n排序结果:");Arrays.stream(nums).forEach(num->{System.out.print(num+" ");});}public static void quickSort(int[] nums, int low, int high){if(low<high){//以第一个数为基准数,将大于基准数的数放于基准数右侧,小于的则放于左侧int middle = Qsort(nums, low, high);//对排序后的左部分排序quickSort(nums, low, middle-1);//对排序后的右部分排序quickSort(nums, middle+1, high);}}public static int Qsort(int[] nums, int low, int high){/*** 单次排序* 步骤:* 1.从右往左找出第一个比基准数小的数* 2.从左往右找出第一个比基准数大的数* 3.重复以上,直到low>high*/int middle = nums[low];while(low<high){//从右往左找出第一个比基准数小的数while(low<high&&nums[high]>middle)high--;nums[low] = nums[high];//从左往右找出第一个比基准数大的数while(low<high&&nums[low]<=middle)low++;nums[high]=nums[low];}nums[low] = middle;//返回基准数的索引return low;}
}
参考
- 快速排序 —— 菜鸟教程
快速排序算法思想及实现相关推荐
- linux公社 java算法_Java快速排序算法
快速排序算法思想: 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 ...
- 十二之续、快速排序算法的深入分析
十二之续.快速排序算法的深入分析 作者:July 二零一一年二月二十七日 -------------------------- 前言 一.快速排序最初的版本 二.Hoare版本的具体分析 三.Ho ...
- python学习——python实现快速排序算法
python实现快速排序算法 一.快速排序算法实现原理 基本思想 具体步骤 二.图解快速排序 三.py代码实现快速排序算法 一.快速排序算法实现原理 基本思想 先从数列中取出一个数作为基准数. 分区过 ...
- 十大排序算法:快速排序算法
一.快速排序算法思想或步骤 分解: 数组A[p-r]被划分为两个子数组A[p-q-1]和A[q+1-r],使得A[q]为大小居中的数,左侧A[p-q-1]中的每个元素都小于等于它,而右边A[q+1-r ...
- 快速排序 C++代码实现及其算法思想及时间复杂度分析及优化 恋上数据结构笔记
文章目录 复习梗概 算法思想 算法复杂度分析及稳定性 如何优化? 快速排序改进版代码C++ 快速排序个人青春版代码 完整代码 复习梗概 算法思想,别的排序名字直接就能让人联想到它的算法思想,唯独快速排 ...
- 排序算法之快速排序实现及算法思想
快速排序的思想是基于分治算法. 首先说明:快速排序是不稳定的!! 时间复杂度:O(nlogn) 给定区间[l,r] 算法思想: 第一步:确定分界点 可取q[l].q[r].q[(l+r)/2].随机. ...
- 视频教程-快速排序算法-算法思想-Java
快速排序算法-算法思想 十三年软件互联网从业经验,使用JDK从1.4到1.8,从传统系统开发到互联网架构,从Struts使用到spring Cloud,拿过2次极客软件创意比赛大奖.曾经摆过地摊,卖过 ...
- 借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n)
题目:借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n) 完整代码实现: #include< ...
- 快速排序算法实现思想个人理解
一.概述 快速排序是冒泡排序的改进算法.它也是通过不断比较和移动交换来实现排序的,只不过它的实现增大了记录的比较和移动的距离,将关键字较大的元素从前面直接放到后面,关键字较小的元素直接从后面放到前面, ...
最新文章
- 996月入三万,他却要放弃
- python unitest框架_python单元测试框架Unitest
- 中石油训练赛 - 腿部挂件(可持久化字典树)
- java php python 高并发_关于php如何调用Python快速发送高并发邮件的示例代码
- Android串口编程--开关灯Demo(附源码)
- 微信小程序 - 非Form数据怎么发送到后端?
- springsession分布式登录被覆盖_拉勾 分布式 学习小结
- 【软件测试】白盒测试の基路径法
- mybatisplus逆向工程生成代码
- 1_文本处理与词嵌入
- bzoj2818: Gcd
- 《逻辑与计算机设计基础(原书第5版)》——1.7 格雷码
- python管道怎么使用_如何在多个流程中正确使用管道(2)
- android 线程使用监控思路分享
- 小程序路径与APPID获取
- 限时免费下载《程序员面试宝典》.pdf
- 常微分方程机敏问答[1] #20210611
- Excel中如何使用COLUMN和COLUMNS函数
- 防火墙双机热备升级步骤
- blob形式导出Excel
热门文章
- 牛客题霸 [	验证IP地址] C++题解/答案
- [线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程
- P4849 寻找宝藏(模板:四维偏序)
- YBTOJ:伞兵空降(二分图匹配)
- P3302-[SDOI2013]森林【主席树,LCA,启发式合并】
- bzoj3143,P3232-[Hnoi2013]游走【数学期望,高斯消元,贪心】
- nssl1259-sequence【组合数,差分】
- ssl1746-商务旅行【tarjan,LCA】
- 【2018.3.31】模拟赛之一-ssl2406 约数【水题】
- 【SPFA】重建道路(jzoj 1212)