快速排序_快速排序if (left < right) { mid = (right - left) / 2;_ZDF0414的博客-程序员秘密

技术标签: 快速排序  递归实现快速排序  数据结构  栈实现快速排序  

int GetMid(int a[], int left, int right)//三数取中
{
	int mid = left + (right - left) / 2;
	if (a[left] <a[right])
	{
		if (a[mid] < a[left])
		{
			return left;
		}
		else
		{
			if (a[mid]>a[right])
			{
				return right;
			}
			else
			{
				return mid;
			}
		}
	}
	else
	{
		if (a[right] > a[mid])
		{
			return right;
		}
		else
		{
			if (a[mid] > a[left])
			{
				return left;
			}
			else
			{
				return mid;
			}
		}
	}
}


//递归实现
void Re_FastSort(int a[], int left, int right)
{
	if (left >= right)
	{
		return;
	}
	if (right - left < 13)
	{
		InsertSort(a, right - left + 1);
		return;
	}
	int begin = left;
	int end = right;
	int key = GetMid(a, left, right);
	swap(a[left], a[key]);
	int temp = a[left];
	while (begin < end)
	{
		while (begin<end&&a[end]>temp)
		{
			end--;
		}
		if (begin < end)
		{
			a[begin] = a[end];
			begin++;
		}
		while (begin<end&&a[begin]<temp)
		{
			begin++;
		}
		if (begin < end)
		{
			a[end] = a[begin];
			end--;
		}
	}
	a[begin] = temp;
	Re_FastSort(a, left, begin - 1);
	Re_FastSort(a, begin + 1, right);
}

//栈实现
#include<stack>
void NoRe_FastSort(int a[], int left, int right)
{
	assert(a);
	struct left_right
	{
		int _left;
		int _right;
		left_right(int left, int right)
			:_left(left)
			, _right(right)
		{}
	};
	stack<left_right>s;
	s.push(left_right(left, right));
	while (!s.empty())
	{
		int begin = s.top()._left;
		int end = s.top()._right;
		s.pop();

		int key = GetMid(a, begin, end);
		swap(a[begin], a[key]);
		int temp = a[begin];

		int tmpbegin = begin;
		int tmpend = end;
		while (tmpbegin < tmpend)
		{
			while (tmpbegin < tmpend && a[tmpend] > temp)
			{
				tmpend--;
			}
			if (tmpbegin < tmpend)
			{
				a[tmpbegin] = a[tmpend];
				tmpbegin++;
			}
			while (tmpbegin < tmpend && a[tmpbegin] < temp)
			{
				tmpbegin++;
			}
			if (tmpbegin < tmpend)
			{
				a[tmpend] = a[tmpbegin];
				tmpend--;
			}
		}
		a[tmpbegin] = temp;
		if (tmpbegin - 1>begin)
		{
			s.push(left_right(begin, tmpbegin - 1));
		}
		if (tmpbegin + 1 < end)
		{
			s.push(left_right(tmpbegin + 1, end));
		}
	}
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ZDF0414/article/details/50286087

智能推荐

找最小值——C语言_求最小值c语言_橘子的颜色的博客-程序员秘密

解答如下:#include&lt;stdio.h&gt;int main(){ int n; scanf("%d",&amp;n); int a[n]; int i=0; int j=0; int min=0; for(i=0;i&lt;n;i++){ scanf("%d",&amp;a[i]); } m...

PHP fwrite写入文件,记事本打开乱码_fwrite写入文件乱码_Anne_G的博客-程序员秘密

问题写入文件的代码:fwrite($filePath, $data);同事电脑的记事本默认编码是ANSI,打开文件中文显示乱码我电脑的记事本默认编码是UTF-8,打开文件中文显示正常WPS打开文件中文显示正常,Microsoft office打开文件中文乱码解决方案方案一:写入内容之前先写入BOMfwrite($filePath, chr(0xEF).chr(0xBB).chr(0xBF));fwrite($filePath, $data);根本原因请阅读:当文件没有BO

python爬虫教程简书_Python爬虫五大零基础入门教程_weixin_39797324的博客-程序员秘密

这个博主的这个爬虫学习系列教程,很详细啊,从入门到实战、进阶等都有详细的文档介绍,对爬虫感兴趣的小伙伴推荐一看。实验楼的爬虫教程不是太多,但是都有详细的讲解和代码,而且有在线开发环境,对于学习者是非常不错的。其中最喜欢的就是那个,因为我自己超喜欢看电影。还有一个也挺好的 ,算是福利吧,哈哈。这是一个收集各种爬虫 (默认爬虫语言为 python)的集合,其中还有蛮多爬虫蛮有趣的,而且每个爬虫都有详细...

〖产品思维训练白宝书 - 产品思维认知篇⑦〗- 聊一聊 产品经理 的工作内容与职责划分_不渴望力量的哈士奇的博客-程序员秘密

大家在这里肯定会疑惑,为什么要借助 "产品思维" 来帮助我们突破成长呢?"产品思维" 究竟好在哪里?我觉得还是有必要从 "产品经理" 的角度来揭示一下 "产品思维" 的重要性。 那么这一章节就先来聊一聊身为 "产品经理" ,他们又是如何思考、如何解决问题。先来简单认识一下这个行业以及岗位的工作内容,看看能不能从中受到对应的启发。

数据分析入门之数据分析方法_阿优乐扬的博客-程序员秘密

文章目录1、基本统计1.1、导入数据1.2、数据描述1.3、统计各值2、分组分析2.1、导入数据2.2、增加一倍数列2.3、基本统计2.4、多重分组统计2.5、查看数据2.6、多层索引查询2.6.1、建立多层索引2.6.2、索引查询2.7、重置索引、3、分布分析、3.1、导入数据3.2、数据分组3.3、统计分组数据4、交叉分析4.1、导入数据并分组4.2、交叉分析(透视表)4.2、合并DataFrame5、结构分析5.1、导入数据5.2、交叉分析(透视表)5.3、交叉分析运算6、相关关

java集合TreeMap使用自然排序,定制排序_蓝蓝223的博客-程序员秘密

import java.util.Comparator;import java.util.TreeMap;public class Demo3 { public static void main(String[] args) { System.out.println("使用自然排序:"); TreeMap treeMap=new TreeMap(

随便推点

hdu 2045 LELE的RPG难题 #DP_成江的博客-程序员秘密

Problem Description人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题:有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.

linux 多网卡 路由顺序_linux下多网卡多子网如何指定路由_weixin_39957805的博客-程序员秘密

一、前言服务器有时候存在多网卡,并且不同的网卡在不同的子网中,但怎么样才能划分 子网 的路由呢?(这里说的路由不是默认路由,是指定的路由)显然你不想写一段 route add 巴拉巴拉 一大堆的 在/etc/rc.local 中,因为这样只有在重启服务器时候才会生效,万一 我要是 service network restart 不就傻眼了所以可以在 /etc/sysconfig/network-s...

计算机网络线下作业b卷,[东北大学]18年6月考试《计算机网络》考核作业_弓长丶艮的博客-程序员秘密

东北大学继续教育学院计算机网络试卷(作业考核线下)B 卷(共 5 页)注:请您单面打印,使用黑色或蓝色笔,手写完成作业。杜绝打印,抄袭作业。一、选择题(每题1分,共30分)()1.IP电话采用的交换方式为。A.分组交换B.电路交换C.报文交换D.信元交换()2.以下不属于网卡与内存的交互方式的是。A.I/O编程方式B.广播方式C.DMA方式D.内存共享方式()3.在同一个信道上的同一时刻,能够只进...

小D课堂 - 新版本微服务springcloud+Docker教程_6-02 springcloud网关组件zuul_weixin_30566063的博客-程序员秘密

笔记2、SpringCloud的网关组件zuul基本使用 简介:讲解zuul网关基本使用 1、加入依赖 2、启动类加入注解 @EnableZuulProxy 默认集成断路器 @EnableCircuitBreaker 默认访问规则 http://gateway:port...

nodejs项目实例博客管理系统_IT实战课堂的博客-程序员秘密

计算机毕业设计nodejs毕设项目之nodejs基于node.js的博客系统-IT实战课堂_哔哩哔哩_bilibili计算机毕业设计nodejs毕设项目之nodejs基于node.js的博客系统-IT实战课堂共计2条视频,包括:G08 434-nodejs基于node.js的博客系统、项目资源获取等,UP主更多精彩视频,请关注UP账号。1绪论1.1 课题研究的背景与意义。...

maven学习系列——(六)maven搭建私服_阿飞云的博客-程序员秘密

这一篇学习和整理私服的搭建 私服的使用在公司还是比较多的 ,会整理在window上搭建私服和linux上搭建私服!

推荐文章

热门文章

相关标签