快速排序在最坏的情况下时间复杂度Ω(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
链接地址

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

  1. 对10个元素进行快速排序,在最好情况下,元素间的比较次数为( )次。

    对10个元素进行快速排序,在最好情况下,元素间的比较次数为( 19 )次. 快排最好的情况就是每一趟都能把数据分成两部分,且前一部分和后一部分元素个数相近. 对于n=10,比较次数为a10=9+a5+ ...

  2. 琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记

    琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记 2011年12月20日 基础篇 第1章 背景知识 1 1.1 Win32的软硬件平台 1.1.1 80x86系列处理器简史 1.1 ...

  3. 算法导论 实验三 快速排序及其优化

    目录 一.实验目的 二.实验内容 三.实验要求 四.算法设计与分析 五.详细设计与实现 六.结果分析 七.总结 一.实验目的 1. 理解快速排序的概念和基本思想 2. 了解适用快速排序的问题类型,并能 ...

  4. 各排序算法最好最坏平均情况下的时间复杂度

    方式: 平均 最坏 最好 插入 n^2 n^2 n 希尔 n^1.3 / / 冒泡 n^2 n^2 n 快速 nlogn n^2 nlogn 选择 n^2 n^2 n^2 堆排 nlogn nlogn ...

  5. 两个鸡蛋测试:从100层楼往下扔鸡蛋,求最坏情况下确认保证鸡蛋可以不破的最大楼层所需次数

    最坏情况下求得最优解所需的次数 内容说明 本文是在看过<<妙解谷歌压箱底面试题:如何正确的从楼上抛鸡蛋>>一文以后做的总结,该文章对此问题描写的很详细,但是在拜读的过程中也花了 ...

  6. Leapfrog Triejoin:最坏情况下的最优连接算法

    介绍 leapfrog triejoin是商业数据记录系统 LogicBlox® 采用的一种新颖的连接算法,在不同的基准测试中表现出色.leapfrog triejoin论文的写作者认为这个算法,即使 ...

  7. win10在不关闭防火墙的情况下实现无线投屏

    一.问题描述 手机要想通过无线投屏连接到win10电脑的显示器,一般都需要关闭系统自带的防火墙才行.如果不关闭防火墙,有可能发生"投影出现问题"的异常情况,见下图.可是一旦要使用无 ...

  8. C语言-快速排序算法(递归Hoare版)

    废话不多说,先看代码 #define _CRT_SECURE_NO_WARNINGS 1 //快速排序算法,递归求解 #include <stdio.h> void swap(int* a ...

  9. 下列各排序法中,最坏情况下的时间复杂度最低的是(**C** )A.希尔排序 B.快速排序 C.堆排序 D.冒泡排序

    下列各排序法中,最坏情况下的时间复杂度最低的是(C ) 希尔排序 A.快速排序 B.堆排序 C.冒泡排序 D.正确答案:C 题目解析: 堆排序最坏情况时间下的时间复杂度为 O(nlog2n) :希尔排 ...

最新文章

  1. php日历如何写,如何写一个好看的实用的日历
  2. python中lambda使用
  3. python曲线拟合笔记
  4. 电影点评系统论文java_毕业设计(论文)-基于web的电影点评系统分析与设计.docx...
  5. ACL 2020 《Cross-Modality Relevance for Reasoning on Language and Vision》论文笔记
  6. 搭建大数据开发环境-Hadoop篇
  7. javascript在数组的开头推送元素[重复]
  8. kubernetes视频教程笔记 (11)-pod容器生命周期、Init容器
  9. 202202 喜马拉雅 下载 下架产品为mp3 m4a格式
  10. SURF特征提取(使用matlab自带函数)
  11. html5富文本编辑器菜鸟手册,富文本编辑器froalaEditor(全面)附教程
  12. python文本文件合并,python将多个文本文件合并为一个文本的代码(便于搜索)
  13. 义齿计算机辅助制作技术包括,可摘局部义齿CAD/CAM/SLM金属3D打印制作新方法
  14. 【韩语图片文字识别】如何快速识别韩语图片文字,将文字变成电子档,进行翻译处理教程
  15. VS2015安装包-下载
  16. IE浏览器被2345网址导航劫持
  17. [论文笔记]Rob-GAN: Generator, Discriminator, and Adversarial Attacker
  18. 华为OD机试Golang解题 - 最快到达医院方式
  19. 基于ssm的校园二手电子交易平台
  20. 论文阅读:Personalized Purchase Prediction of Market with Wasserstein-Based Sequence Matching

热门文章

  1. stringcstdlibctimecstdargctimectypecmathclimits
  2. Android之平时遇见的异常和错误总结(不断更新)
  3. 【C语言简单说】七:自定义函数(1)
  4. java对象引用出错_“Java有值传递和引用传递”为什么错了?
  5. 静止的人如何看待高速运动的球?
  6. 2020中国十大最丑建筑出炉,你觉得哪个更丑?
  7. 2020年高考数学试题难吗?历史上最难数学卷不是2003!
  8. 如果给你一个亿,你想去干嘛?各专业的科研狗是这样回答的……
  9. 颠覆认知!完美赌徒,到底是如何用数学打造经济神话?!
  10. 想不到吧?数学还有如此妙用!