三郎数据结构算法学习笔记:快速排序
发布日期:2021-06-29 20:04:09 浏览次数:2 分类:技术文章

本文共 2000 字,大约阅读时间需要 6 分钟。

三郎数据结构算法学习笔记:快速排序

快速排序法介绍

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

基本思想:

通过一趟排序将要排序的数据分割成独立的两部分,

其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列

图解

在这里插入图片描述

在这里插入图片描述

运行结果

不愧是快速排序:排序前和排序后一秒内完成

在这里插入图片描述

源代码

package com.atguigu.sort;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;public class QuickSort {	public static void main(String[] args) {		int[] arr = {-9,78,0,23,-567,70, -1,900, 4561};		System.out.println("排序前");		System.out.println(Arrays.toString(arr));		//测试快排的执行速度		// 创建要给80000个的随机的数组		int[] arr2 = new int[8000000];		for (int i = 0; i < 8000000; i++) {			arr2[i] = (int) (Math.random() * 8000000); // 生成一个[0, 8000000) 数		}		Date data1 = new Date();		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");		String date1Str = simpleDateFormat.format(data1);		System.out.println("排序前的时间是=" + date1Str);				quickSort(arr, 0, arr.length-1);				Date data2 = new Date();		String date2Str = simpleDateFormat.format(data2);		System.out.println("排序后的时间是=" + date2Str);		System.out.println("arr=" + Arrays.toString(arr));	}	public static void quickSort(int[] arr,int left, int right) {		int l = left; //左下标		int r = right; //右下标		//pivot 中轴值		int pivot = arr[(left + right) / 2];		int temp = 0; //临时变量,作为交换时使用		//while循环的目的是让比pivot 值小放到左边		//比pivot 值大放到右边		while( l < r) { 			//在pivot的左边一直找,找到大于等于pivot值,才退出			while( arr[l] < pivot) {				l += 1;			}			//在pivot的右边一直找,找到小于等于pivot值,才退出			while(arr[r] > pivot) {				r -= 1;			}			//如果l >= r说明pivot 的左右两的值,已经按照左边全部是			//小于等于pivot值,右边全部是大于等于pivot值			if( l >= r) {				break;			}						//交换			temp = arr[l];			arr[l] = arr[r];			arr[r] = temp;						//如果交换完后,发现这个arr[l] == pivot值 相等 r--, 前移			if(arr[l] == pivot) {				r -= 1;			}			//如果交换完后,发现这个arr[r] == pivot值 相等 l++, 后移			if(arr[r] == pivot) {				l += 1;			}		}				// 如果 l == r, 必须l++, r--, 否则为出现栈溢出		if (l == r) {			l += 1;			r -= 1;		}		//向左递归		if(left < r) {			quickSort(arr, left, r);		}		//向右递归		if(right > l) {			quickSort(arr, l, right);		}					}}

转载地址:https://blog.csdn.net/m0_51684972/article/details/110070039 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:三郎数据结构算法学习笔记:基数排序
下一篇:三郎数据结构算法学习笔记:希尔排序

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月30日 09时11分01秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

SqlServer日期DateTime转varchar 2019-04-30
<!DOCTYPE html>作用是什么?严格模式(Standards)与混杂(quirk)模式如何区分?它们有何意义?严格模式与混杂模式的语句解析不同点有哪些? 2019-04-30
URL统一资源定位符、URI统一资源标识符和URN统一资源命名之前的联系和区别 2019-04-30
grid布局介绍(容器、项目、网格线、单元格、容器和项目属性template-columns|rows相关函数和相关关键字\gap\areas\flow\content\justify\align) 2019-04-30
ES6 let注意点、解构(重命名、默认值、结构给已有变量)、模块化(注意点、导入导出语法)、对象属性扩展写法 2019-04-30
知乎热议:未来3到5年内,哪个方向机器学习人才最稀缺? 2019-04-30
推荐几款好用的文本编辑器 2019-04-30
上海有哪些牛逼的互联网公司? 2019-04-30
美团外卖批量投放智能安全头盔:骑手可语音处理订单 2019-04-30
指甲盖大小塞了500亿晶体管!领先台积电,IBM打造世界首款2纳米芯片!能耗仅为7纳米的1/4!... 2019-04-30
武汉最牛批的互联网基本都在这了~ 2019-04-30
全网最全Python操作Excel教程,建议收藏! 2019-04-30
导弹如何自动追踪目标?这其实是个数学问题 2019-04-30
Mac电脑使用:Mac电脑查看本机的IP和公网IP的方法 2019-04-30
前端开发:自定义时间轴的使用 2019-04-30
Flutter开发:iOS 14+系统的iPhone在debug模式下运行App报错的解决方法 2019-04-30
Mac电脑使用:Mac电脑查看本机的IP和公网IP的方法 2019-04-30
NOI 2020 解题报告 2019-04-30
一道神奇的几何题 2019-04-30
【UR #5】怎样跑得更快 题解 2019-04-30