快速排序(c++)——经典交换排序(二)

news/2024/5/20 0:30:16 标签: 排序算法, 快速排序, c++, 算法, 数据结构

快速排序——经典交换排序(二)

算法原理:

快速排序采用分治法
在待排序序列中任选一个元素pivot作为基准(一般取首元素)
通过一趟排序将待排序的序列划分为两部分
将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边

详细图解:

<a class=快速排序图解" />

1.设置两个指针i,j分别指向最左边left和最右边right
2.设置第一个数为基准数 temp = arr[left];
3. j指针先从右往左移动,如果 arr[j] >= temp 即大于基准值j–,(因为要找小于基准值的)当 arr[j] < temp 时找到一个小于基准值,此时将该值与基准值交换( arr[i] = arr[j]; )
3.i指针先从左往右移动,如果 arr[i] <= temp 即小于基准值i++,(因为要找大于基准值的)当 arr[i] > temp 时找到一个大于基准值,此时将该值与基准值交换( arr[j] = arr[i]; )
4.直接 i >= j,此时一趟排序结束,将基准值归位arr[i] = temp;
5.依次对两个子表进行递归排序(重复以上步骤)
quicksort(arr, left, i - 1);
quicksort(arr, i + 1, right);

C++代码:

//快速排序函数算法
void quicksort(int *arr, int left, int right) {
	int i, j, temp;
	if (left > right) {
		return;
	}
	//基准
	i = left;
	j = right;
	while (i < j) {
		while (arr[j] >= temp && i < j) {    //找出右边小于基准值的数放到左边
			j --;
		}
		arr[i] = arr[j];                     //交换
		while (arr[i] <= temp && i < j) {    //找出左边大于基准值的数放到右边
			i ++;
		}
		arr[j] = arr[i];
	}
	//归位
	arr[i] = temp;
	quicksort(arr, left, i - 1);
	quicksort(arr, i + 1, right);
}

快速算法>排序算法分析:

空间效率:快排是递归的,需要借助一个递归工作区, 最好情况: O(log2(n), 最坏情况:O(n)

时间效率:最坏:O(n^2)最佳:O(Nlog2(N))

稳定性:不稳定

快速排序是所有内部算法>排序算法中平均性能最优的算法>排序算法

往期精彩内容 冒泡排序——经典交换算法(一)
在这里插入图片描述


http://www.niftyadmin.cn/n/1813640.html

相关文章

Web数据挖掘 第十二章 Web使用挖掘的读书笔记

Web数据挖掘的一个重要挖掘对象是服务器日志。每一次访问都会被服务器记录在日志中作为一行。 要分析日志&#xff0c;首先要识别出用户和会话。 用户识别可以是基于 cookie 的&#xff0c;也可以是基于 IP主机名称 会话识别有两种方式&#xff1a; 1&#xff09;设定所有会话都…

免费和高级定制后台管理模板

后台管理在界面设计中占有重要的一席。管理面板的设计是非常重要&#xff0c;必须是干净的&#xff0c;简单的。例如&#xff0c;如果你是一个购物网站或游戏网站&#xff0c;你绝对需要一个高度可定制的管理模板的管理员。在今天的文章中&#xff0c;我们收集具有精心设计的商…

Java Web实现登录注册(超详细附代码)

Java Web实现登录注册&#xff08;超详细附代码&#xff09; 文章目录Java Web实现登录注册&#xff08;超详细附代码&#xff09;1.前言2.登录注册设计流程3.注册的数据流程4.登录的数据流程5.部分代码的展示5.1注册5.2登录6.总结1.前言 相信刚学Javaweb的小伙伴第一个接触的…

模拟下拉select

用jquery模拟一淘上面的搜索下拉的功能&#xff0c;利用css3做箭头的动画效果。 JS代码&#xff1a; /** 模拟搜索下拉select * 默认调用方式&#xff1a;$(el).setSelect({ * optionList: [], //这里是下拉的选项&#xff0c;如[aa,bb] * hiddenInput: #optionHidden, /…

深度学习——带你通俗理解卷积神经网络(CNN)

卷积神经网络&#xff08;CNN&#xff09;基础知识 文章目录卷积神经网络&#xff08;CNN&#xff09;基础知识1.前言2.卷积层3.池化层4.全连接层5.经典的卷积神经网络1.前言 如果说深度神经网络模型中的“明星”是谁&#xff1f;那么非卷积神经网络莫属。   下面给大家简单介…

LZW压缩算法原理及其Java实现

LZW压缩算法是一种新颖的压缩方法&#xff0c;由Lemple-Ziv-Welch 三人共同创造&#xff0c;用他们的名字命名。 它采用了一种先进的串表压缩不&#xff0c;将每个第一次出现的串放在一个串表中&#xff0c;用一个数字来表示串&#xff0c;压 缩文件只存贮数字&#xff0c;则不…

浅谈C++中的rand()和srand()函数

目录1.前言2.rand( )2.srand()3.产生随机数的方法3.产生一定范围内的随机数的公式1.前言 我们知道rand()和srand()都可以产生随机数。但是其实随机数都是伪随机数&#xff0c;且两者有很大差别&#xff0c;下面我们来详细说一说两个函数的用法。 2.rand( ) 用法 &#xff1a;i…

Putdb WebBuilder 6.5 正式版本发布

2012年9月&#xff0c;WebBuilder 6.5 正式版本终于发布。新版本的 WebBuilder 使用了多项最新的技术&#xff0c;使开发 Web 应用的开发更快捷和简单。 WebBuilder是一款跨平台、数据库和浏览器的可视化Web应用开发平台。WebBuilder使用了多项最新的技术&#xff0c;使Web应用…