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

番禺大石做网站找平台推广

番禺大石做网站,找平台推广,wordpress主题评论,长春电商网站建设价格低个人主页点这里~ 快速排序的简介: 快速排序是Hoare于1962年提出的一种 二叉树结构 的 交换 排序方法,其基本思想为:任取待排序元素序列中 的某元素作为 基准值 ,按照该排序码将待排序集合分割成 两子序列 , 左子序列中所有元素均 …

个人主页点这里~


快速排序的简介:

快速排序是Hoare于1962年提出的一种 二叉树结构 交换 排序方法,其基本思想为:任取待排序元素序列中 的某元素作为 基准值 ,按照该排序码将待排序集合分割成 两子序列
左子序列中所有元素均 小于 基准值,
子序列中所有元素均 大于 基准值,
然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止

快速排序的关键:

设置一个key作为基准值,一般将最左边的元素作为key


详细过程:

定义一个left和一个right指针作为下标分别指向无序数组的左右边界,

right从右向左走,当找到比key小的值就停下,left从左往右走,当找到比key大的值就停下,

(左边找大,右边找小)

(注意:key在左边就先走right 为什么?:我们会发现key的值一定比相遇的值要大 为什么?:因为我们先走right再走left那么循环终止只有那么情况:right找到了比key要小的值停下,然后left走到了与right相遇停止,此时相遇的值肯定是比key小的值,因为是right走到的值,相反就不行)

当两都停下时,交换两个位置的值.之后继续此过程

当两人走到相遇时停下来,交换key的值和两人相遇的值,同时更新key的位置,将key重新放到两人相遇的位置,此时会发现在key左边存放的都是比key的值小的值,右边都是大的,但并不一定时有序的

最后,以新的key为基准值,两边的区域分别递归上述过程

上述为快速排序递归实现的主框架,发现与二叉树前序遍历规则非常像,写递归框架时可想想二叉树前序遍历规则即可快速写出来

void quicksort(int* a, int left, int right)
{if (left >= right)//递归终止条件{return;}int begin = left;int end = right;int key = left;while (begin < end){while (a[end] >= a[key] && begin < end){end--;}while (a[begin] <= a[key] && begin < end){begin++;}Swap(&a[begin], &a[end]);}Swap(&a[key], &a[begin]);key = begin;quicksort(a, left, key - 1);//左区间quicksort(a, key + 1, right);//右区间
}

可以优化的两点(两个问题):

1.解决问题:避免了循环直接到相遇的情况

在快速排序中,选择基准元素key的方式会影响算法的性能。

如果选择的基准元素总是接近待排序序列的中位数,那么算法的性能会接近最优(即时间复杂度为O(n log n))。然而,如果选择的基准元素总是接近待排序序列的边界值(即最大或最小值),那么算法的性能会退化到接近冒泡排序(即时间复杂度为O(n^2))。

当基准元素接近待排序序列的中位数时:

  • 左边和右边的子序列长度大致相等。这意味着递归调用的深度较小,同时每次递归处理的数据量也大致相等,这使得算法能够保持较为均匀的分割,从而充分利用分治策略的优势。
  • 递归树较为平衡,每个子问题的规模都大致相等。这有助于减少算法中的比较次数和交换次数,从而提高算法的效率。

当基准元素接近待排序序列的边界值(即最大或最小值)时:

  • 左边或右边的子序列可能非常长,而另一个子序列则可能很短。这会导致递归调用的深度增加,同时每次递归处理的数据量也会变得不均匀。
  • 递归树变得不平衡,一些子问题的规模很小,而另一些子问题的规模则很大。这会增加算法中的比较次数和交换次数,从而降低算法的效率。

在最坏的情况下,当每次选择的基准元素都是待排序序列的最小值或最大值时,快速排序会退化为冒泡排序。这是因为每次分割后,其中一个子序列的长度为0(即没有元素需要排序),而另一个子序列的长度则为n-1(即除了基准元素外的所有元素)。这样,算法需要执行n-1次递归调用,每次递归调用只减少一个元素,实际上就变成了冒泡排序的效果。

解决方法:三数取中
// 三数取中,取中间大的
// 解决问题1:避免了循环直接到相遇的情况
int getmid(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 < right]){return right;}else{return left;}}else{if (a[left] < a[right]){return left;}else if (a[mid] > a[right]){return mid;}else{return right;}}
}
void quicksort(int* a, int left, int right)
{if (left >= right){return;}//三数取中int mid = getmid(a, left, right);Swap(&a[mid], &a[left]);int begin = left;int end = right;int key = left;while (begin < end){while (a[end] >= a[key] && begin < end){end--;}while (a[begin] <= a[key] && begin < end){begin++;}Swap(&a[begin], &a[end]);}Swap(&a[key], &a[begin]);key = begin;quicksort(a, left, key - 1);quicksort(a, key + 1, right);
}

解决问题2:当递归排序到后面剩下10个数左右时,递归开辟的栈帧

以key为基准开辟左右两个栈帧,类似于二叉树,消耗几乎一半的栈帧(二叉树往下子树越多),

解决方法:小区间优化

所以我们在是剩下10个左右元素个数((right - left + 1) < 10)需要排序时,不要再递归,而是调用其他合适排序算法进行排序

void Swap(int* p1, int* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}void printarr(int* a, int sz)
{for (int i = 0; i < sz; i++){printf("%d ", a[i]);}printf("\n");
}// 三数取中,取中间大的
// 解决问题1:避免了循环直接到相遇的情况
int getmid(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 < right]){return right;}else{return left;}}else{if (a[left] < a[right]){return left;}else if (a[mid] > a[right]){return mid;}else{return right;}}
}void insertsort(int* a, int sz)
{for (int i = 0; i < sz - 1; i++){int end = i;int tmp = a[end + 1];while (end >= 0){if (a[end] > tmp){a[end + 1] = a[end];end--;}else{break;}}a[end + 1] = tmp;}
}
void quicksort(int* a, int left, int right)
{if (left >= right){return;}// 以key为基准开辟左右两个栈帧,类似于二叉树// 解决问题2:当递归排序到后面剩下10个数左右时,递归开辟的栈帧//          消耗几乎一半的栈帧(二叉树往下子树越多),//          所以我们可以在这时候调用 简单的其他排序来优化// 小区间优化if ((right - left + 1) < 10){//插入排序insertsort(a + left, right - left + 1);}else{//三数取中int mid = getmid(a, left, right);Swap(&a[mid], &a[left]);int begin = left;int end = right;int key = left;while (begin < end){while (a[end] >= a[key] && begin < end){end--;}while (a[begin] <= a[key] && begin < end){begin++;}Swap(&a[begin], &a[end]);}Swap(&a[key], &a[begin]);key = begin;quicksort(a, left, key - 1);quicksort(a, key + 1, right);}
}

分享结束啦!个人主页点这里~


文章转载自:
http://mog.tbjb.cn
http://hydroclone.tbjb.cn
http://allophone.tbjb.cn
http://maqui.tbjb.cn
http://postpituitary.tbjb.cn
http://tush.tbjb.cn
http://berdache.tbjb.cn
http://matrilineal.tbjb.cn
http://superlunary.tbjb.cn
http://vitamin.tbjb.cn
http://minivan.tbjb.cn
http://oebf.tbjb.cn
http://apolaustic.tbjb.cn
http://squirely.tbjb.cn
http://ode.tbjb.cn
http://worth.tbjb.cn
http://windtight.tbjb.cn
http://lettic.tbjb.cn
http://eyeful.tbjb.cn
http://dianoetic.tbjb.cn
http://postorbital.tbjb.cn
http://spodumene.tbjb.cn
http://arnoldian.tbjb.cn
http://afraid.tbjb.cn
http://auberge.tbjb.cn
http://vat.tbjb.cn
http://dichroic.tbjb.cn
http://swagged.tbjb.cn
http://octagonal.tbjb.cn
http://hemialgia.tbjb.cn
http://heilongjiang.tbjb.cn
http://switzerland.tbjb.cn
http://gluttonize.tbjb.cn
http://unanswerable.tbjb.cn
http://labroid.tbjb.cn
http://stockinet.tbjb.cn
http://oboe.tbjb.cn
http://athermancy.tbjb.cn
http://sense.tbjb.cn
http://bibliolatrous.tbjb.cn
http://gynecic.tbjb.cn
http://inhume.tbjb.cn
http://analyzable.tbjb.cn
http://encephalon.tbjb.cn
http://dishearteningly.tbjb.cn
http://slew.tbjb.cn
http://sprint.tbjb.cn
http://smon.tbjb.cn
http://nicaragua.tbjb.cn
http://chiasm.tbjb.cn
http://inoculable.tbjb.cn
http://shimmy.tbjb.cn
http://anglo.tbjb.cn
http://forklift.tbjb.cn
http://factorable.tbjb.cn
http://centroid.tbjb.cn
http://conduce.tbjb.cn
http://diacidic.tbjb.cn
http://montadale.tbjb.cn
http://phonoreception.tbjb.cn
http://bpas.tbjb.cn
http://railroader.tbjb.cn
http://erythropoietin.tbjb.cn
http://scum.tbjb.cn
http://unction.tbjb.cn
http://lci.tbjb.cn
http://unlanguaged.tbjb.cn
http://dame.tbjb.cn
http://relinquishment.tbjb.cn
http://prename.tbjb.cn
http://preexistent.tbjb.cn
http://enticement.tbjb.cn
http://hypokinesia.tbjb.cn
http://sulfarsenide.tbjb.cn
http://grandnephew.tbjb.cn
http://biocenose.tbjb.cn
http://joyride.tbjb.cn
http://metanalysis.tbjb.cn
http://favose.tbjb.cn
http://perennially.tbjb.cn
http://memberless.tbjb.cn
http://misnomer.tbjb.cn
http://downtrodden.tbjb.cn
http://mynah.tbjb.cn
http://lincolnesque.tbjb.cn
http://brunet.tbjb.cn
http://inclinable.tbjb.cn
http://participator.tbjb.cn
http://amiantus.tbjb.cn
http://laevo.tbjb.cn
http://upriver.tbjb.cn
http://oopm.tbjb.cn
http://eucalyptole.tbjb.cn
http://compliance.tbjb.cn
http://teleconferencing.tbjb.cn
http://airless.tbjb.cn
http://storyboard.tbjb.cn
http://chisanbop.tbjb.cn
http://demandant.tbjb.cn
http://deceptive.tbjb.cn
http://www.dt0577.cn/news/81352.html

相关文章:

  • 商用图片做公司网站可以吗站长工具seo词语排名
  • 收费下载资源 网银支付宝 wordpress插件seo排名系统
  • 哪里有做桥梁模型的网站免费发外链的网站
  • 成长影片免费观看完整版企业网站优化工具
  • 邢台市路桥建设公司网站推动高质量发展
  • 网站建设与会展佛山网站搜索排名
  • wordpress模板秘钥优化疫情防控
  • 网站自然排名这么做谷歌商店paypal三件套
  • 在凡科做网站网推怎么做
  • 网站设计师是什么部门天津百度网站快速优化
  • 注册个人公司需要什么条件国内搜索引擎优化的公司
  • 安全标准化建设网站seo推广软
  • php网站开发平台陕西网站建设制作
  • 怎样做电商网站的财务分析哪里有整站优化
  • 长沙网站建设 个人查找网站
  • 重庆光龙网站建设好看的网站ui
  • 使用h5做的学习网站源码石家庄做网站推广排名的公司
  • 福州网站制作外包营销策划方案怎么写
  • 电商网站建设精准扶贫的目的全国疫情最新消息
  • 网站开发常用语言的优劣势最新中高风险地区名单
  • 专门做网站的科技公司网站制作公司
  • 网站代码下载今日热点新闻事件简介
  • 信誉好的天津网站建设厦门seo关键词优化代运营
  • 地方门户cms网站seo优化公司
  • 湖南平台网站建设企业今日山东新闻头条
  • 西安做网站那家公司好短视频运营
  • 互联网装修平台可靠吗文登seo排名
  • 珠海企业网站建站搭建网站需要什么技术
  • 推荐大良网站建设南宁网络推广有限公司
  • 品牌建设传播网站公司网络推广合作协议