算法导论CLRS 7.3 随机版快速排序

2024-02-25 20:32

本文主要是介绍算法导论CLRS 7.3 随机版快速排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*7.3 随机化快速排序*QUICK-SORT*/
#include<iostream>
#include<iomanip>
#include<vector>
#include<ctime>
using namespace std;
typedef vector<int>::iterator ivecIte;size_t chkivIte(ivecIte iteB, ivecIte iteE)
{if(iteE < iteB) {cout<<"wrong in iterator range!"<<endl;exit(0);}return iteE - iteB;
}
ivecIte partition(vector<int> &ivec, ivecIte iteB, ivecIte iteE)
{chkivIte(iteB, iteE);//ite1指向大于*(iteE-1)队列的最左边的元素ivecIte ite1 = iteB, ite2;for(ite2 = iteB; iteE-1 != ite2; ++ite2) {if( *ite2 < *(iteE-1)) {if( ite1!= ite2) {//ite1与ite2指向相同时不能使用^*ite1 = *ite1 ^ *ite2;*ite2 = *ite1 ^ *ite2;*ite1 = *ite1 ^ *ite2;}++ite1;}}//如果ite为iteE-1,说明iteE-1指向最大值,要将其排出//而且两者相等时不能用^if(ite1 != iteE-1){*ite1 = *ite1 ^ *(iteE - 1);*(iteE - 1) = *ite1 ^ *(iteE - 1);*ite1++ = *ite1 ^ *(iteE - 1);}return ite1;
}ivecIte rndPartition(vector<int> &ivec, ivecIte iteB, ivecIte iteE)
{srand((unsigned)time(NULL));ivecIte iteRnd = iteB + rand() % (iteE-iteB);if(iteRnd != iteE-1) {*iteRnd = *iteRnd ^ *(iteE - 1);*(iteE-1) = *iteRnd ^ *(iteE - 1);*iteRnd = *iteRnd ^ *(iteE - 1);}return partition(ivec, iteB, iteE);
}void rndQuickSort(vector<int> &ivec, ivecIte iteB, ivecIte iteE)
{if(1 < iteE-iteB) {ivecIte iteP = rndPartition(ivec, iteB, iteE);rndQuickSort(ivec, iteB, iteP);rndQuickSort(ivec, iteP, iteE);}
}int main() 
{vector<int> ivec;int inData;cout<<"input some integers with end-of-file!"<<endl;while(cin>>inData)ivec.push_back(inData);rndQuickSort(ivec, ivec.begin(), ivec.end());for(ivecIte ite = ivec.begin(); ivec.end() != ite; ++ite) cout<<setw(5)<<*ite;cout<<endl;system("PAUSE");return EXIT_SUCCESS;
}

这篇关于算法导论CLRS 7.3 随机版快速排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/746623

相关文章

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3