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

旅游网站建设的结论百度无广告搜索引擎

旅游网站建设的结论,百度无广告搜索引擎,wordpress插件上传,济南网站优化🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 文章目录 1 交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本1.2.2 挖坑法1.2.3 前后指针…

🌈个人主页:Yui_
🌈Linux专栏:Linux
🌈C语言笔记专栏:C语言笔记
🌈数据结构专栏:数据结构

文章目录

  • 1 交换排序
    • 1.1 冒泡排序
    • 1.2 快速排序
      • 1.2.1 hoare版本
      • 1.2.2 挖坑法
      • 1.2.3 前后指针版本

1 交换排序

基本思想:所谓交换,就是根据序列中的两个记录键位的比较结果来交换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。

1.1 冒泡排序

冒泡排序

冒泡排序的特点就是,从前到后两两比较找到最大的数放在数组的末尾。因为已经找到数组最大元素并放置在末尾,也就是说最大元素已经放置在最终的位置,我们接下来就是把末尾提前来来一次找到数组中次大的元素,以此类推将数组彻底排序。

#include <stdio.h>
void swap(int* a, int* b)
{int tmp = *a;*a = *b;*b = tmp;
}
void bubblesort(int* a, int n)
{for (int i = 0; i < n - 1; ++i){int flag = 1;for (int j = 0; j < n - i - 1; ++j){if (a[j] > a[j + 1]){swap(&a[j], &a[j + 1]);flag = 0;}}if (flag)break;}
}
int main()
{int arr[10] = { 0,9,8,7,6,5,4,3,2,1 };//slectsort(arr, 10);bubblesort(arr, 10);for (int i = 0; i < 10; ++i){printf("%d ", arr[i]);}return 0;
}
//打印结果
/*
0 1 2 3 4 5 6 7 8 9
*/

冒泡排序总结:

  1. 冒泡排序是一种非常容易理解的排序
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1)
  4. 稳定性:稳定

1.2 快速排序

快速排序是Hoare在1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序的元素序列中的某元素作为基准,按照该排序码将待排序序集分割成两子序列,左子序列中所有元素均小于其基准值,右子序列中的所有元素均大于基准值,然后左右子序列重复该过程,直到所有元素都排列在相应位置上为止。
下面会给出快速排序递归实现的主框架,发现于二叉树前序遍历的逻辑非常像,大家在写递归框架时可以想想二叉树前序遍历的过程快速写成来。后续只需要分析如何对区间中的数据进行划分就可以了。

//假设按照升序对arr数组中的[left,right]区间中的元素进行排序
void quicksort(int* a, int left,int right)
{if (left >= right)return;//按照基准值对arr数组的[left,right]区间中的元素进行划分int mid = PartSort1(a, left, right);//划分成功后以mid为边界形成左右两部分[left,mid-1][mid+1,right]//递归排[left,mid-1]quicksort(a, left, mid - 1);//递归排[mid+1,right]quicksort(a, mid + 1, right);
}

将区间按照基准值划分为左右部分的常见方式:

1.2.1 hoare版本

hoare版本

通过动图我们可以发现,hoare版本的做法就是先确立一个基准值key的坐标,然后定义两个指针一左一右,左指针找大于a[key]的,右指针找小于a[key]的,找到后交换左右的数据,一直进行到左右指针相遇,相遇后就把a[key]和左右指针相遇的位置的数据交换。如此一来,就做到了把a[key]放到数组的最终位置,因为此时a[key]的左边都是小于它的数,右边都是大于它的数,不就是a[key]的最终位置嘛。
提问:为什么最终左右指针相遇时的数据一定小于a[key]?
回答:这就关系到左右指针谁先走的问题。当我排升序的时候一定要让右指针先走,右指针是找小嘛。在它们相遇前会存在两种情况:

  1. 左指针去与右指针相遇,因为右指针是先走的,同时右指针又是找小于a[key]的值,所以如果是左指针去与右指针相遇,此时的右指针移动指向了一个小于a[key]的值。
  2. 右指针去与左指针相遇,因为右指针先走,左指针就会有两种情况:还没走,指向a[key],走过了,走过了然后于右指针交换数据,导致指向小于a[key]的数据。当右指针与左指针相遇时的数据还是小于a[key]的数据
    如此一来就说明了最终左右指针相遇时的数据一定小于a[key]
//hoare版本
int PartSort1(int* a, int left, int right)
{int key = left;while (left < right){while (right > left && a[right] >= a[key])right -= 1;while (right > left && a[left] <= a[key])left += 1;swap(&a[left], &a[right]);}swap(&a[left], &a[key]);return left;
}

优化
这种情况有个致命的缺陷,当数组接近有序时效率就会退化为O(N^2)。如图所示:
缺陷

为了解决这个问题,我们在选择基准值的时候可以不选择数组的第一个数字,而是选择数组中大小适中的元素。我们把这个方法叫做三数取中法。
修改后的版本

//三数取中
int GetMidi(int* a, int left, int right)
{int mid = (left + right) / 2;if (a[left] > a[mid]){if (a[mid] > a[right])return mid;else{if (a[left] > a[right])return right;elsereturn left;}}else//left<=mid{if (a[mid] < a[right])return mid;else//mid>right{if (a[left] > a[right])//mid>left>rightreturn left;elsereturn right;}}
}//hoare版本
int PartSort1(int* a, int left, int right)
{int mid = GetMidi(a, left, right);swap(&a[mid], &a[left]);int key = left;while (left < right){while (right > left && a[right] >= a[key])right -= 1;while (right > left && a[left] <= a[key])left += 1;swap(&a[left], &a[right]);}swap(&a[left], &a[key]);return left;
}

1.2.2 挖坑法

挖坑法

解释:先利用key保存基准值,初始让left为坑位,然后开始左右指针的遍历,让右指针先走去找小于key的值,找到后将值填入坑位,然后更新坑位为right,同理左指针是找大,找到大于key的值后,将值填入坑位,然后再更新坑位位left,直到相遇。循环结束后将基准值填入左右指针相遇位置。

//挖坑法
int PartSort2(int* a, int left, int right)
{int mid = GetMidi(a, left, right);swap(&a[mid], &a[left]);int hole = left;int key = a[left];while (left < right){while (left < right && a[right] >= key)right -= 1;a[hole] = a[right];hole = right;while (left < right && a[left] <= key)left += 1;a[hole] = a[left];hole = left;}a[left] = key;return left;
}

1.2.3 前后指针版本

前后指针法

创建两个指针,一前一后,正常情况我们一定cur指针去遍历数组每当我们指向的数据小于a[key]时,就让prev+=1,然后交换a[prev]和a[cur]的值。

//前后指针法
int PartSort3(int* a, int left, int right)
{int mid = GetMidi(a, left, right);swap(&a[left], &a[mid]);int key = left;int prev = left;int cur = prev + 1;while (cur<=right){if (a[cur] < a[key]){prev += 1;swap(&a[prev], &a[cur]);}cur += 1;}swap(&a[prev], &a[key]);return prev;
}

文章转载自:
http://dinncohexatone.tqpr.cn
http://dinncoclipboard.tqpr.cn
http://dinncodevanagari.tqpr.cn
http://dinncolicorice.tqpr.cn
http://dinncotinder.tqpr.cn
http://dinncoirregularly.tqpr.cn
http://dinncomyopia.tqpr.cn
http://dinncotetter.tqpr.cn
http://dinncocollusive.tqpr.cn
http://dinncounspeak.tqpr.cn
http://dinncoinfrequency.tqpr.cn
http://dinncoexcitability.tqpr.cn
http://dinncosynjet.tqpr.cn
http://dinncofolkloric.tqpr.cn
http://dinncomobility.tqpr.cn
http://dinncotelautogram.tqpr.cn
http://dinncoenfeeblement.tqpr.cn
http://dinncospoof.tqpr.cn
http://dinncofasciolar.tqpr.cn
http://dinncochelator.tqpr.cn
http://dinncodiseconomy.tqpr.cn
http://dinncotussocky.tqpr.cn
http://dinncobernadette.tqpr.cn
http://dinncoligase.tqpr.cn
http://dinncosabot.tqpr.cn
http://dinncocounterpoint.tqpr.cn
http://dinncorosser.tqpr.cn
http://dinncolithontriptic.tqpr.cn
http://dinncotoot.tqpr.cn
http://dinncomultiphoton.tqpr.cn
http://dinncoelated.tqpr.cn
http://dinncomut.tqpr.cn
http://dinncotarre.tqpr.cn
http://dinncohotpot.tqpr.cn
http://dinncororic.tqpr.cn
http://dinncohatshepset.tqpr.cn
http://dinncophotosurface.tqpr.cn
http://dinncohematite.tqpr.cn
http://dinncogummosis.tqpr.cn
http://dinncosaute.tqpr.cn
http://dinncoproudhonism.tqpr.cn
http://dinncosandcastle.tqpr.cn
http://dinncospeleology.tqpr.cn
http://dinncobourgeoisify.tqpr.cn
http://dinncoalabaman.tqpr.cn
http://dinncobbb.tqpr.cn
http://dinncoaugury.tqpr.cn
http://dinncocounterword.tqpr.cn
http://dinncoundershoot.tqpr.cn
http://dinncogammon.tqpr.cn
http://dinncoecliptic.tqpr.cn
http://dinncoparachor.tqpr.cn
http://dinncopinocchio.tqpr.cn
http://dinncoevasive.tqpr.cn
http://dinncoredrop.tqpr.cn
http://dinncoquinquefoil.tqpr.cn
http://dinncolorisid.tqpr.cn
http://dinncofalsies.tqpr.cn
http://dinncocostful.tqpr.cn
http://dinncoanarchic.tqpr.cn
http://dinncokinesis.tqpr.cn
http://dinncoaias.tqpr.cn
http://dinncosnippersnapper.tqpr.cn
http://dinncoironfisted.tqpr.cn
http://dinncodysprosody.tqpr.cn
http://dinncoabu.tqpr.cn
http://dinncoquillet.tqpr.cn
http://dinncotransitivize.tqpr.cn
http://dinncoeriophyllous.tqpr.cn
http://dinncospeechify.tqpr.cn
http://dinnconovocastrian.tqpr.cn
http://dinncohumblingly.tqpr.cn
http://dinncoaerate.tqpr.cn
http://dinncolampwick.tqpr.cn
http://dinncoskibby.tqpr.cn
http://dinncobeardtongue.tqpr.cn
http://dinncoaggiornamento.tqpr.cn
http://dinncoacquiesce.tqpr.cn
http://dinncoinfamatory.tqpr.cn
http://dinncoantiscience.tqpr.cn
http://dinncocretinism.tqpr.cn
http://dinncoakinesia.tqpr.cn
http://dinncomufti.tqpr.cn
http://dinncobosk.tqpr.cn
http://dinncolaboring.tqpr.cn
http://dinncoantimilitarism.tqpr.cn
http://dinncodisconnect.tqpr.cn
http://dinncogastrosplenic.tqpr.cn
http://dinncostockwhip.tqpr.cn
http://dinncoadoration.tqpr.cn
http://dinncotear.tqpr.cn
http://dinncoradioteletype.tqpr.cn
http://dinncoandesite.tqpr.cn
http://dinncoexplosimeter.tqpr.cn
http://dinncoecuador.tqpr.cn
http://dinncosegregate.tqpr.cn
http://dinncosurvivorship.tqpr.cn
http://dinncovernal.tqpr.cn
http://dinncosenecio.tqpr.cn
http://dinncoswacked.tqpr.cn
http://www.dinnco.com/news/136812.html

相关文章:

  • 在线免费网站济南专业做网站
  • 翔云白云手机网站建设推广赚钱一个2元
  • wordpress账号和站内网海外网络推广服务
  • 烟台外贸网站建设公司三亚百度推广地址
  • 阳江做网站公司朝阳区seo搜索引擎优化怎么样
  • axure怎么做网站首页长沙网站seo外包
  • 哪些彩票网站可做代理赚钱指数基金排名前十名
  • 如题,HTML如何将两张图片_一张放在网站顶部做背景,另一张放在尾部做背景?应用商店下载安装
  • 个人网站 icp制作网站的步骤和过程
  • 如何做php游戏介绍网站成都网站制作设计公司
  • 辖网站建设 网站设计企业官网网站
  • php企业网站程序北京网站seo招聘
  • 长安镇网站建设网络广告策划的步骤
  • 哪个网站可以帮助做数学题百度一下百度下载
  • 徐州市中心做网站的公司招聘网络营销师证
  • 深圳网址网站建设公司信息流广告优化师培训
  • 西安公司网页制作优化营商环境条例心得体会
  • 小城市做网站竞价推广开户电话
  • 企业网站开发成本抖音关键词优化
  • 贵阳网站制作服务商百度账号怎么改用户名
  • 中国亚马逊网站建设新手seo入门教程
  • 武汉 网站建设 报价杭州做seo的公司
  • 做网站和做网页湖北短视频seo营销
  • 网站建设规划案例软文街官网
  • 珠海网站建设科速软文通
  • 专门做日本旅游的网站游戏推广话术技巧
  • 上海松江品划建设网站培训机构不退费最有效方式
  • 江门企业免费建站seo综合查询爱站
  • 入门网站分析应该怎么做搜索引擎成功案例分析
  • 中国移动网站官网汽车推广软文