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

磁县邯郸网站建设广西上林县住房城乡建设网站

磁县邯郸网站建设,广西上林县住房城乡建设网站,制作公司网页平台,wordpress还原1.常见排序算法的复杂度 1.快速排序 1.1快速排序为什么快 从名称上就能看出#xff0c;快速排序在效率方面应该具有一定的优势。尽管快速排序的平均时间复杂度与“归并排序”和“堆排序”相同#xff0c;但通常快速排序的效率更高#xff0c;主要有以下原因。 出现最差情况…1.常见排序算法的复杂度 1.快速排序 1.1快速排序为什么快 从名称上就能看出快速排序在效率方面应该具有一定的优势。尽管快速排序的平均时间复杂度与“归并排序”和“堆排序”相同但通常快速排序的效率更高主要有以下原因。 出现最差情况的概率很低虽然快速排序的最差时间复杂度为 O(N的平方) 没有归并排序稳定但在绝大多数情况下快速排序能在 O(nlog⁡N) 的时间复杂度下运行。缓存使用效率高在执行哨兵划分操作时系统可将整个子数组加载到缓存因此访问元素的效率较高。而像“堆排序”这类算法需要跳跃式访问元素从而缺乏这一特性。复杂度的常数系数小在上述三种算法中快速排序的比较、赋值、交换等操作的总数量最少。这与“插入排序”比“冒泡排序”更快的原因类似。 1.2基准数优化 快速排序在某些输入下的时间效率可能降低。举一个极端例子假设输入数组是完全倒序的由于我们选择最左端元素作为基准数那么在哨兵划分完成后基准数被交换至数组最右端导致左子数组长度为n-1右子数组长度为0 如此递归下去每轮哨兵划分后都有一个子数组的长度为0分治策略失效快速排序退化为“冒泡排序”的近似形式。 为了尽量避免这种情况发生我们可以优化哨兵划分中的基准数的选取策略。例如我们可以随机选取一个元素作为基准数。然而如果运气不佳每次都选到不理想的基准数效率仍然不尽如人意。 需要注意的是编程语言通常生成的是“伪随机数”。如果我们针对伪随机数序列构建一个特定的测试样例那么快速排序的效率仍然可能劣化。 为了进一步改进我们可以在数组中选取三个候选元素通常为数组的首、尾、中点元素并将这三个候选元素的中位数作为基准数。这样一来基准数“既不太小也不太大”的概率将大幅提升。当然我们还可以选取更多候选元素以进一步提高算法的稳健性。采用这种方法后时间复杂度劣化至O(N)方  的概率大大降低。 2.冒泡排序 ​ 3.选择排序 void selectNum(vectorint nums) {//选择排序时间复杂度O(N)的平方 空间复杂度01int n nums.size();for (int i 0; i n-1; i) {int k i;//用k记录未排序区间的最小元素for (int j i 1; j n; j) {if (nums[j] nums[k]) {k j;}}swap(nums[i],nums[k]);} }​ 4.插入排序 void insertSort(vectorint nums) {//外循环for (int i 1; i nums.size(); i) {//内循环 int base nums[i];int j i - 1;while (j0nums[j] base) {nums[j 1] nums[j];j--;}nums[j 1] base;} } 5.归并排序: void merge(vectorint nums, int num1[], int left, int right,int mid){//合并int l_pos left;//左半区int r_pos mid 1;//右半区int pos left;//临时存储的数组while(l_posmidr_posright) {if (nums[l_pos] nums[r_pos]) {num1[pos] nums[l_pos];}else {num1[pos] nums[r_pos];}}//合并剩余的左半区while (l_pos mid) {num1[pos] nums[l_pos];}//合并剩余的右半区while (r_pos right) {num1[pos] nums[r_pos];}while (left right) {//最后 将临时数组中的元素拷贝到目标数组中nums[left] num1[left];left;} } void msort(vectorint nums,int num1[],int left,int right) {//分治if (left right) {int mid (left right) / 2;msort(nums,num1,left,mid);msort(nums, num1, mid 1, right);merge(nums,num1,left,right,mid);} } void merge_sort(vectorint nums) {//入口函数int* num1 (int*)malloc(nums.size()*sizeof(int));if (num1) {msort(nums,num1,0,nums.size()-1);free(num1);} }2.leetCode.58最后一个单词的长度 给你一个字符串 s由若干单词组成单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 双指针yyds一个指针指向最后一个字符串的最后一个字符另一个指针指向第一个相减即可。  class Solution { public:int lengthOfLastWord(string s) {int is.size()-1;while(s[i] ){i--;}int ji-1;while(j0s[j]! ){j--;}return i-j;} };
http://www.dnsts.com.cn/news/11853.html

相关文章:

  • dw软件怎么用安徽优化推广
  • 昊客网络惠州市企业网站seo点击软件
  • 网站开发发展现状上海热门事件
  • 做海报哪个网站好无锡高端网站建设开发
  • 三明购物网站开发设计网站左侧边栏导航代码
  • 关于网站建设的工作总结网站建设广告背景图
  • 网站变app热门图片素材
  • 深圳网站建设推广论坛html演示网站
  • 上市企业网站建设phpcms 多语言网站
  • 岳池建设局网站网站建设捌金手指专业5
  • 广东网站建设微信商城运营中国企业排名100强
  • 国外的设计网站app吗wordpress使用html5
  • 网站备案取名wordpress 4.7.1
  • 找简历的网站外网怎样访问自己做的网站
  • 网站开发立项东莞市正度网络科技有限公司
  • 福海网站制作企业网盘搭建
  • 湖南移动网站建设网站目录权限 user
  • 泰安电脑网站建设电话wordpress标签加入文章列表
  • 网站建设北京海淀wordpress伪静态301
  • 小说网站开发需求沈阳市建设监理协会网站
  • wordpress 屏蔽升级企业网站seo从哪开始
  • 培训机构做网站宣传wordpress 主题排
  • 定制做网站c# 网站开发实例教程
  • 学做炒菜的网站哪个网站做h5最好
  • 我局在网站建设方面哈尔滨公司建站模板
  • 湖南工商网址seo sem 做网站
  • 旅行社网站方案东莞常平隐贤山庄门票多少
  • 易支付做网站接口怎么赚钱小程序制作流程视频
  • 苏州网站建设哪家公司好建设工程敎育网网站
  • 通辽网站设计网站架构设计师工作内容