算法导论 第2版 7.3 快速排序随机化版本

2024-06-22 06:48

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

根据书上伪码编写:

#include <iostream>
#include <ctime>
using namespace std;int A[11] = {-1,4,1,8,3,10,2,5,6,9,7};//下标从1开始,因此A[0]不用,用-1标记
int n = sizeof(A)/sizeof(int)-1;int partition(int *A, int p, int r)//划分函数
{int x = A[r];int i = p-1;int temp;for(int j = p; j<=r-1; j++){if(A[j] <= x){i++;temp = A[i];A[i] = A[j];A[j] = temp;}}temp = A[i+1];A[i+1] = A[r];A[r] = temp;return i+1;
}int randomized_partition(int *A, int p, int r)//从A[p]~A[r]中随机选择pivot
{int temp;int i = rand()%(r-p) + p;//生成p到r之间的随机数//原理:对于任意整数r,p有:0 <= rand()%(r-p+1) <= r-p//于是:0+p <= rand()%(r-p+1)+p <= r-p+p//即:p <= rand()%(r-p+1)+p <= rtemp = A[r];A[r] = A[i];A[i] = temp;return partition(A, p, r);//调用划分函数
}void ramdomized_quicksort(int *A, int p, int r)//随机快速排序的主体函数
{if(p < r){int q = randomized_partition(A, p, r);//生成pivot,赋给qramdomized_quicksort(A, p, q-1);//分治法,递归调用自身ramdomized_quicksort(A, q+1, r);}
}int main()
{//根据系统时间设置随机数种子srand( (unsigned)time(NULL) );ramdomized_quicksort(A, 1, n);//对A[1...n]进行原地快排for(int i = 0; i<=n; i++)//输出cout << A[i] << " ";
}

输出:-1 1 2 3 4 5 6 7 8 9 10

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



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

相关文章

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Python如何快速下载依赖

《Python如何快速下载依赖》本文介绍了四种在Python中快速下载依赖的方法,包括使用国内镜像源、开启pip并发下载功能、使用pipreqs批量下载项目依赖以及使用conda管理依赖,通过这些方法... 目录python快速下载依赖1. 使用国内镜像源临时使用镜像源永久配置镜像源2. 使用 pip 的并

springboot3.4和mybatis plus的版本问题的解决

《springboot3.4和mybatisplus的版本问题的解决》本文主要介绍了springboot3.4和mybatisplus的版本问题的解决,主要由于SpringBoot3.4与MyBat... 报错1:spring-boot-starter/3.4.0/spring-boot-starter-

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav