当前位置: 首页 > news >正文

多种方法求解数组排序

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk

      ⸝⋆   ━━━┓
     - 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
┗━━━━━━━  ➴ ⷯ

本人座右铭 :   欲达高峰,必忍其痛;欲戴王冠,必承其重。

👑💎💎👑💎💎👑 
💎💎💎自💎💎💎
💎💎💎信💎💎💎
👑💎💎 💎💎👑    希望在看完我的此篇博客后可以对你有帮助哟

👑👑💎💎💎👑👑   此外,希望各位大佬们在看完后,可以互相支持,蟹蟹!
👑👑👑💎👑👑👑

题目

 相信前面我们学习了数据结构的八大排序对于这个题目的解答不成问题,但是从中也可以看出有些算法还是可以进行优化

1)直接插入排序

当我们用知己插入来进行排序的话代码是跑不过去 的,因为当原数组与要排序的数组若是逆序的话就对应最坏的时间:N^2

2)堆排序

不管是用上调(时间:N*logN)算法来进行排序还是用下调(N)算法来进行排序都是可以跑过去的

3)快排

当数组有大量重复元素的时候对应最换的情况:N^2

 针对这一种情况进行优化:采用三路划分把数组整体分为三部分:小于key ,大量重复为key的,大于key的

 三路划分:是基于Hoare 和前后指针的思想实现的

具体实现见下:

 代码:
int GetMid_i(int* a, int left, int right)
{int mid_i = (left + right) / 2;if (a[mid_i] > a[left]){if (a[left] > a[right])return left;else if (a[right] < a[mid_i])return right;elsereturn mid_i;}else //a[mi_I ] <= a[left]{if (a[left] < a[right])return left;else if (a[right] > a[mid_i])return  right;elsereturn mid_i;}return mid_i;
}void   Quick_sort1(int*a, int begin, int end)
{if (begin >= end){return;}int left = begin;int right = end;int cur = left+ 1;int key_i = GetMid_i(a, begin, end);Swap(&a[begin], &a[key_i]);int key = a[begin];while (cur <= right){if (a[cur] == key)cur++;else if (a[cur] > key){Swap(&a[cur], &a[right]);right--;}else{Swap(&a[cur], &a[left]);cur++;left++;}}Quick_sort(a, begin, left - 1);Quick_sort(a, right + 1, end);
}
int* sortArray(int* nums, int numsSize, int* returnSize) {//Shell_sort(nums,numsSize);//直接插入排序超出时间,希尔OK//  Select_sort(nums,numsSize); //N^2// Heap_sort(nums,numsSize);Quick_sort1(nums,0,numsSize-1);//当有大量重复元素的时候 :时间 N^2// Merge_sort(nums,numsSize);//ok //  Count_sort(nums,numsSize);//OK*returnSize = numsSize;return nums;}
运行结果

4)计数排序 

对应时间复杂度:O(N + rangae)

计数排序是可以跑过去的

相关文章:

  • 每日OJ题_牛客CM26 二进制插入
  • FPGA的时钟资源
  • VMware下载与安装
  • Python 初步了解urllib库:网络请求的利器
  • 问题:前端获取long型数值精度丢失,后面几位都为0
  • Synthetic Temporal Anomaly Guided End-to-End Video Anomaly Detection 论文阅读
  • STM32---通用定时器(一)理论基础
  • 【亲测有效】解决三月八号ChatGPT 发消息无响应!
  • 【vue2基础教程】vue指令
  • 深入理解 Webpack 热更新原理:提升开发效率的关键
  • 新概念英语第二册(73)
  • T1 小美的数组询问(15分) - 美团编程题 题解
  • DHCP中继实验(华为)
  • Python图像处理:1.插值、频域变换与对比度增强
  • Android中的抽象类与接口的区别是什么?谈谈List, Set, Map的区别?
  • 【翻译】babel对TC39装饰器草案的实现
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • idea + plantuml 画流程图
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • python docx文档转html页面
  • Python爬虫--- 1.3 BS4库的解析器
  • Spring声明式事务管理之一:五大属性分析
  • Twitter赢在开放,三年创造奇迹
  • vue2.0项目引入element-ui
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 小而合理的前端理论:rscss和rsjs
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​ssh免密码登录设置及问题总结
  • ​决定德拉瓦州地区版图的关键历史事件
  • # 透过事物看本质的能力怎么培养?
  • #微信小程序:微信小程序常见的配置传旨
  • (09)Hive——CTE 公共表达式
  • (27)4.8 习题课
  • (C#)获取字符编码的类
  • (floyd+补集) poj 3275
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (zt)最盛行的警世狂言(爆笑)
  • (安卓)跳转应用市场APP详情页的方式
  • (笔试题)合法字符串
  • (超详细)语音信号处理之特征提取
  • (二)换源+apt-get基础配置+搜狗拼音
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)http-server应用
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net 获取url的方法
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • [Android Studio 权威教程]断点调试和高级调试
  • [BZOJ2850]巧克力王国
  • [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
  • [HackMyVM]靶场 Wild
  • [NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现
  • [New Portal]Windows Azure Virtual Machine (3) 在VM上挂载磁盘