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

各大搜索引擎网站登录入口湖南哪里有做网站的

各大搜索引擎网站登录入口,湖南哪里有做网站的,房地产分销平台有哪些,咸宁网站建设哪家专业一、引言 归并排序是一种高效且稳定的排序方法#xff0c;而逆序对问题是算法领域的一个经典问题#xff0c;本文教大家如何实现归并排序#xff0c;以及如何使用归并排序去结果逆序对问题 二、归并排序 归并排序思想 分解#xff1a;将待排序的数组分成两半#xff0c…一、引言 归并排序是一种高效且稳定的排序方法而逆序对问题是算法领域的一个经典问题本文教大家如何实现归并排序以及如何使用归并排序去结果逆序对问题 二、归并排序 归并排序思想 分解将待排序的数组分成两半递归地对这两半进行归并排序直到每个子数组的大小为1此时已经是有序的。 合并将两个已排序的子数组合并成一个新的有序数组。合并过程通常使用两个指针分别指向两个子数组的当前元素比较这两个元素并将较小的元素放入结果数组中直到所有元素都被合并。 我们借助递归可以很好的实现数据的分解和合并我们可以借助代码区理解归并排序 #include stdio.h#define MAXSIZE 100int merge[MAXSIZE]; void Merge(int a[], int left, int right, int middle) {int i left; int j middle 1; int k left; while (i middle j right) {if (a[i] a[j]) {merge[k] a[i]; }else {merge[k] a[j];}}while (i middle) {merge[k] a[i];}while (j right) {merge[k] a[j];}for (i left; i right; i) {a[i] merge[i];} }void Mergesort(int a[], int left, int right) {if (left right) {int middle (left right) / 2;Mergesort(a, left, middle); Mergesort(a, middle 1, right); Merge(a, left, right, middle); } }void show(int a[], int n) {for (int i 0; i n; i) {printf(%d , a[i]);}printf(\n); }int main() {int a[MAXSIZE];int n;printf(请输入待排关键字个数(n0): );scanf_s(%d, n);printf(请依次输入关键字的数据值:\n);for (int i 0; i n; i) {scanf_s(%d, a[i]);}Mergesort(a, 0, n - 1); printf(该组数据排序后的结果: );show(a, n);printf(该组数据逆序对的个数: %d\n, count); printf();return 0; }这段代码便是归并排序的核心代码其中分解通过递归的方式进行而合并我们则定义了一个函数  void Merge(int a[], int left, int right, int middle) {int i left; int j middle 1; int k left; while (i middle j right) {if (a[i] a[j]) {merge[k] a[i]; }else {merge[k] a[j];count (middle - i 1); }}while (i middle) {merge[k] a[i];}while (j right) {merge[k] a[j];}for (i left; i right; i) {a[i] merge[i];} }该函数我们可以实现两个有序函数的合并合并之后还是有序函数  那么我们如何保证我们要合并的两个数组原本是有序的呢这就需要我们探究一下递归的本质了 我们通过如下递归最后会将数组分解为一个一个的单独的数字 void Mergesort(int a[], int left, int right) {if (left right) {int middle (left right) / 2;Mergesort(a, left, middle); Mergesort(a, middle 1, right); Merge(a, left, right, middle); } } 这些一个一个的数字就是我们最早的有序数组之后我们通过有序数组产生的数组也都是有序的经过我们的拆分和合并最后就会产生一个合并好的最终的有序数组 这样归并排序的全过程就结束了 三、逆序对 1.何为逆序对 逆序对是指在一个序列中两个元素的相对位置与它们的大小关系不一致。具体来说对于一个序列中的两个元素 a[i]a[i] 和 a[j]a[j]如果 ij ij 且 a[i]a[j] a[i]a[j]那么就称这个对 (a[i],a[j])(a[i],a[j]) 为一个逆序对。 例如在序列 [3,1,2][3,1,2] 中 逆序对有 (3,1)(3,1) 和 (3,2)(3,2)因为 33 在 11 和 22 之前但 33 的值大于它们。而 (1,2)(1,2) 不是逆序对因为 1212。 逆序对的数量在计算排序算法的复杂度、分析数组的有序性等方面有重要应用。在某些排序算法中逆序对的数量可以用来衡量数组的“无序程度”。 简而言之就是前面的数比后面的数大那么这两个数的下标就构成了逆序对 2.如何用归并思想求取逆序对 代码如下 #include stdio.h#define MAXSIZE 100int count 0; int merge[MAXSIZE]; void Merge(int a[], int left, int right, int middle) {int i left; int j middle 1; int k left; while (i middle j right) {if (a[i] a[j]) {merge[k] a[i]; }else {merge[k] a[j];count (middle - i 1); }}while (i middle) {merge[k] a[i];}while (j right) {merge[k] a[j];}for (i left; i right; i) {a[i] merge[i];} }void Mergesort(int a[], int left, int right) {if (left right) {int middle (left right) / 2;Mergesort(a, left, middle); Mergesort(a, middle 1, right); Merge(a, left, right, middle); } }void show(int a[], int n) {for (int i 0; i n; i) {printf(%d , a[i]);}printf(\n); }int main() {int a[MAXSIZE];int n;printf(请输入待排关键字个数(n0): );scanf_s(%d, n);printf(请依次输入关键字的数据值:\n);for (int i 0; i n; i) {scanf_s(%d, a[i]);}Mergesort(a, 0, n - 1); printf(该组数据排序后的结果: );show(a, n);printf(该组数据逆序对的个数: %d\n, count); printf();return 0; }其实逆序对的求取我们只需要在我们归并排序的基础上加入几行代码便可其中最核心的是下面的一段 int i left; int j middle 1; int k left; while (i middle j right) {if (a[i] a[j]) {merge[k] a[i]; }else {merge[k] a[j];count (middle - i 1); }} 当我们的右边数组要比左边数组的数小时便构成了逆序对的条件但是这样的依次移动会产生几个逆序对呢我们可以推断一下 我们左边的数列是有序的当右边的某个数比左边的小时它比左边那个数组中的右边的数都要小 所以 count (middle - i 1); 最后的逆序对的个数便是count的值 四、结语 今天微服务的学习要放在晚上了
http://www.hkea.cn/news/14482800/

相关文章:

  • 中通建设计院网站wordpress 文章缩放
  • 西安免费做网站价格河北网站开发哪家好
  • 外贸手工做兼职的网站延安做网站的公司电话
  • 网站模板带后台 下载龙岗网站建设哪家技术好
  • 潍坊网页模板建站淘宝客网站怎么做优化
  • 河津网站建设网站建设网页设计与网页制作
  • 用ps做网站还是wdwordpress 评论不了
  • 网站设计初步规划农家乐网站模板
  • it之家网站源码wordpress 谷歌收录
  • 母婴行业网站建设关于网站建设实训报告
  • 对网站做数据统计的目的是什么烟台微信网站建设
  • 怎么制作网站平台电话wordpress媒体库加一个分类
  • 建个静态网站花都网站建设公司
  • 杭州网站模板建站360网站建设
  • 个人网站管理系统wordpress 当前分类
  • 做推广赚钱的网站给人做违法网站规避
  • asp access 做网站宜昌外贸网站建设优化推广
  • 网站网页的书签怎么做许昌网站推广公司
  • 怎么创建网站快捷方式到桌面有人有片资源吗免费高清
  • 深圳官方网站制作成都房地产交易中心官网
  • 北京建网站公司有哪些网址导航网址大全
  • 成都网站制作和建设东莞市公租房申请网站-建设网
  • 扒完网站代码之后怎么做模板图片分类展示网站源码
  • 有关网站开发的国外书籍外包做网站赚钱么
  • 搜索网站的软件有哪些公司建网站怎么做
  • 宁波市有哪些网站建设公司可以注销的网站
  • 建立html网站在线做网站视频在线观看
  • 成都微信网站设计数据需求 网站建设
  • 广东哪有做网赌网站飞机网页设计实训报告
  • 第一章 网站建设基本概述小程序制作软件