快速排序在最坏的情况下时间复杂度(Ω(nlgn)(算法导论第三版9.3-3))

快速排序在最坏的情况下时间复杂度Ω(nlgn)

1⃣️在元素各异时或者少量相等(元素个数n>70)
时间复杂度Ω(nlgn)

void quick_sort_by_median(int *array,int start,int end)
{if(start<end){int median = select(array,start,end,(end - start + 1)/2 + (end - start + 1) % 2);int middle = partition(array,start,end,median);quick_sort_by_median(array,start,middle-1);quick_sort_by_median(array,middle+1,end);}
}

2⃣️在有大量元素相同时(元素个数n>70)
时间复杂度Ω(nlgn)

KeyValuePair partition_contains_equal_elements(int *array,int start,int end,int key)
{//line.key表示已排序中最后一个小于key的元素的位置//line.value表示已排序中最后一个等于key的元素的位置KeyValuePair line(start - 1,start - 1);for (int i = start; i < end + 1; ++i) {if(array[i]<key){line.key++;line.value++;int temp = array[i];array[i] = array[line.value];array[line.value] = array[line.key];array[line.key] = temp;}else if(array[i] == key){line.value++;array[i] = array[line.value];array[line.value] = key;}}return line;
}
void quick_sort_by_median_contains_equal_elements(int *array,int start,int end)
{if(start<end){int median = select(array,start,end,(end - start + 1)/2 + (end - start + 1)%2);KeyValuePair middle_line = partition_contains_equal_elements(array,start,end,median);quick_sort_by_median(array,start,middle_line.key);quick_sort_by_median(array,middle_line.value + 1,end);}
}

辅助函数select和partition
链接地址
辅助类KeyValuePair
链接地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性表的定义与操作-顺序表,链式表(C语言)

顺序表: typedef int Position; typedef struct LNode *List; struct LNode {ElementType Data[MAXSIZE];Position Last; };/* 初始化 */ List MakeEmpty() {List L;L (List)malloc(sizeof(struct LNode));L->Last -1;return L; }/* 查找 */ #define ERROR -1Position Fi…

【Azure Show】|第三期 人工智能大咖与您分享!嘉宾陈海平胡浩陈堰平

欢迎来到Azure Show!Azure ShowHello,大家好&#xff0c;又来到新的一期的Azure Show!本期是人工智能专场&#xff0c;我们邀请到微软Data&AI的解决方案架构师陈堰平&#xff0c;Tensorflow.NET 作者陈海平&#xff0c;还有微软人工智能方向最有价值专家胡浩和大家分享人工…

确定S中最接近中位数的k个元素(算法导论第三版9.3-7)

确定S中最接近中位数的k个元素 &#xff08;算法导论第三版9.3-7题&#xff09; 时间复杂度O(n) vector<int> k_elements_closest_to_median(int *array,int start,int end,int k) {vector<int> result;int median select(array,start,end,(end - start 1)/2 …

深入探究ASP.NET Core异常处理中间件

前言全局异常处理是我们编程过程中不可或缺的重要环节。有了全局异常处理机制给我们带来了很多便捷&#xff0c;首先我们不用满屏幕处理程序可能出现的异常&#xff0c;其次我们可以对异常进行统一的处理&#xff0c;比如收集异常信息或者返回统一的格式等等。ASP.NET Core为我…

找出有序数组X和Y中所有元素的中位数(X,Y分别含n个元素)(算法导论第三版9.3-8)

找出有序数组X和Y中所有元素的中位数&#xff08;X&#xff0c;Y分别含n个元素&#xff09; &#xff08;算法导论第三版9.3-8&#xff09; 时间复杂度O&#xff08;lgn&#xff09; int find_median_two_ordered_arrays(int *array_a,int *array_b,int length) {int a_start…

有序序列中的i个最大数(算法导论思考题9-1)

有序序列中的i个最大数 &#xff08;算法导论思考题9-1&#xff09; a 时间复杂度O(nlgni) //总共时间复杂度O(nlgni) vector<int> i_largest_number_in_ordered_sequence_a(int *array,int length,int i){vector<int>result;//时间复杂度O(nlgn)quick_sort_by_m…

.NET Core加解密实战系列之——消息摘要与数字签名算法

简介加解密现状&#xff0c;编写此系列文章的背景&#xff1a;需要考虑系统环境兼容性问题&#xff08;Linux、Windows&#xff09;语言互通问题&#xff08;如C#、Java等&#xff09;&#xff08;加解密本质上没有语言之分&#xff0c;所以原则上不存在互通性问题&#xff09;…

堆栈的定义与操作-顺序存储,链式存储(C语言)

顺序存储&#xff1a; typedef int Position; struct SNode {ElementType *Data; /* 存储元素的数组 */Position Top; /* 栈顶指针 */int MaxSize; /* 堆栈最大容量 */ }; typedef struct SNode *Stack;Stack CreateStack( int MaxSize ) {Stack S (Stack)malloc(…

快速排序和选择模版类

快速排序和选择模版类 template<typename T> void insert_sort(T *array,int start,int end) {for (int i start 1; i < end 1; i) {int j i - 1 ;T key array[i];while (j > start && key < array[j]){array[j1] array[j];j--;}array[j1] key…

造轮子-AgileConfig一个基于.NetCore开发的轻量级配置中心

微服务确实是行业的一个趋势&#xff0c;我自己也在把一些项目往微服务架构迁移。玩微服务架构配置中心是一个绕不过去的东西&#xff0c;有很多大牌的组件可以选&#xff0c;比如spring-cloud-config&#xff0c;apoll&#xff0c;disconf等等。而我为什么还要造一个轮子呢&am…

队列的定义与操作-顺序存储,链式存储(C语言)

顺序存储&#xff1a; typedef int Position; struct QNode {ElementType *Data; /* 存储元素的数组 */Position Front, Rear; /* 队列的头、尾指针 */int MaxSize; /* 队列最大容量 */ }; typedef struct QNode *Queue;Queue CreateQueue( int MaxSize ) {Que…

带权中位数-算法导论第三版第九章思考题9-2

带权中位数-算法导论第三版第九章思考题9-2 b 时间复杂度O(nlgn) float find_median_with_weights_b(float *array,int length) {quick_sort<float>(array,0,length-1);float sum 0;int index 0;while (sum < 0.5){sum array[index];index;}return array[index-1…

SQL Server 分页+json分享

1。SQL Server 版本2012 新增SQL分页的写法最近封装一个轻量级的ORM用到了分页&#xff0c;以前只知道使用Row_Number函数&#xff0c;现在发现sqlserver 新增的 {orderBy} offset {start} rows fetch next {pageSize} rows only 也挺好用的。简单回顾下 sqlserver 各个版本支持…

二叉树的存储结构及四种遍历(C语言)

二叉树的存储结构: typedef struct TNode *Position; typedef Position BinTree; /* 二叉树类型 */ struct TNode{ /* 树结点定义 */ElementType Data; /* 结点数据 */BinTree Left; /* 指向左子树 */BinTree Right; /* 指向右子树 */ };二叉树的四种遍历: void Inord…

Stack(栈 c++模版实现)

Stack(栈 c模版实现&#xff09; // // Created by XXX on 2021/7/10. //#ifndef C11LEARN_STACK_H #define C11LEARN_STACK_H template<typename T> class Stack{ private:int capacity;int top;T *array; public:Stack(int capacity 50);Stack(const Stack<T>&…

用十行代码快速创建权限管理系统

&#xff08;坚持做自己&#xff09;为了防止说是标题党&#xff0c;我先展示下真是就需要十行代码&#xff1a;当然还有appsettings.json配置文件&#xff0c;和种子数据文件&#xff0c;这个不算代码之内。1、项目背景介绍Blog.Core项目开源也两年了&#xff0c;经过了很多许…

编程中的一种特殊递归-尾递归

尾递归&#xff1a;在程序要返回的地方出现递归 从编译的角度来讲&#xff0c;尾递归都可以用循环来实现。 例子&#xff1a;二叉搜索树的查找操作Find递归函数可以写成循环的方式实现

Queue(队列 C++模版实现)

Queue&#xff08;队列 C模版实现&#xff09; #ifndef C11LEARN_QUEUE_H #define C11LEARN_QUEUE_H template<typename T> class Queue { private:int tail;int head;int capacity;T *array; public:Queue(int capacity 50);Queue(const Queue<T> &queue);Q…

ERP的配置管理实践

源宝导读&#xff1a;随着ERP系统的日益复杂&#xff0c;应用部署的方式越来越复杂&#xff0c;应用的配置也变得越来越庞杂&#xff0c;难以维护和管理。本文将介绍配置中心服务通过集中化、可离线的架构设计&#xff0c;解决ERP配置问题的实践经验。一、背景随着ERP业务的日益…

《LIO-SAM阅读笔记》1.IMU预积分模块

前言&#xff1a; LIO-SAM是一个多传感器融合的紧耦合SLAM框架&#xff0c;融合的传感器类型有雷达、IMU和GPS&#xff0c;其中雷达和IMU在LIO-SAM框架中必须使用的。LIO-SAM的优化策略采用了GTSAM库&#xff0c;GTSAM库采用了因子图的优化方法&#xff0c;其提供了一些列C的外…