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

免费视频网站推广软件南通住房和城乡建设厅网站

免费视频网站推广软件,南通住房和城乡建设厅网站,专业做网站较好的公司广州,杭州网站设计的公司非递归版本的归并排序是从已经有序的小数组开始逐渐到大数组的一个循环,这个时候我们需要创建临时的一个数组来存放排好序的数,因为我们如果直接交换就会导致之后没办法毕竟,所以我们需要这样做。其次我们还需要考虑数组为非偶数的情况&#…

非递归版本的归并排序是从已经有序的小数组开始逐渐到大数组的一个循环,这个时候我们需要创建临时的一个数组来存放排好序的数,因为我们如果直接交换就会导致之后没办法毕竟,所以我们需要这样做。其次我们还需要考虑数组为非偶数的情况,因为我们不能平分数组,所以我们需要额外来考虑这种情况,如果为含有奇数个元素的数组,则会导致最后一个组第二层循环结束时只有一个元素,这时begin2>=n或者加begin2==end2就直接跳出循环,而之后如果遇到begin2==n-1,end2又越界了,我们不能结束循环,因为我们需要来进行排序的,所以我们让end2=n-1这样就不会越界了,至于什么是begin1 end1 begin2 end2

我们可以让一个数组为1 2 3 4最小数组为1    2    3    4,这个时候每个数组有1个元素,则gap=1,这个时候就结束循环,如果为2 个元素的数组,那么我们开始的时候由于begin1为0,end1也为0,我们需要根据定义来求出end1由于end1-begin1=gap-1,而begin2为end1+1,end2为begin2+2*gap-1,我们如果是这样理解就变得简单了,那么如何让这个begin1的初始值改变呢?这个我们可以用一个for循环来让begin1=i,然后一直排序,当然最外围需要一个判断条件是gap<n的while循环,否则我们无法进行每一个数组的排序,这我们每一次结束一次while循环就相当于一次递归的结束,然后两个子数组就合并成一个数组,那么这个时候begin2为i+gap而我们也可以按照我那种方式写,这样方便理解,里面的排序就相当于之前的归并排序算法(不知道的可以直接去看我之前的博客)。所以最终代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
#include<stdbool.h>
#include<stddef.h>//NULL
#include<time.h>
//非递归版本的归并排序
void MergeSortNonR(int* a, int n)
{//创建一个数组int* tmp = (int*)malloc(sizeof(int) * n);if (tmp == NULL){perror("malloc fail1!\n");exit(1);}//初始时令gap=1因为我们的最开始数组只有一个元素int gap = 1;while (gap < n){//根据gap划分组,两两一合并//但是我们每一次都需要让i跨过两个数组的距离即为2*gapfor (int i = 0; i < n; i += 2 * gap){int begin1 = i;int end1 = i + gap - 1;int begin2 = i + gap;int end2 = i + 2 * gap - 1;//如果begin2>=n越界了,我们就需要直接结束循环//为什么不是跳过这个情况?//因为这样已经遍历到最后一个数组了,所以我们直接跳出循环if (begin2 >= n){break;}//如果end2越界了,则我们要让end2置为n-1if (end2 >= n){end2 = n - 1;}//定义一个下标来存储有序的数组int index = begin1;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){tmp[index++] = a[begin1++];}else{tmp[index++] = a[begin2++];}}//有一个数组没有插入完全while (begin1 <= end1){tmp[index++] = a[begin1++];}while (begin2 <= end2){tmp[index++] = a[begin2++];}//导入到原来数组中//这个函数可以自己去搜一下它的用法memcpy(a + i, tmp + i, sizeof(int) * (end2 - i + 1));}//需要进行gap的变化(每一次完成合并后都有gap=2*gapgap *= 2;}
}
//测试
int main()
{int a[] = { 5,4,6,3,8,2,9,0,1,7 };int n = sizeof(a) / sizeof(a[0]);printf("排序之前: ");for (int i = 0; i < n; i++){printf("%d ", a[i]);}MergeSortNonR(a, n  );printf("\n排序之后: ");for (int i = 0; i < n; i++){printf("%d ", a[i]);}return 0;
}

运行结果:

这个非递归算法的理解难度比递归的难多了,但是也是有好处的,有兴趣的可以去用!

http://www.dtcms.com/a/440084.html

相关文章:

  • 自设计网站长安网站制作公司
  • 【数据结构与算法-Day 39】插入排序与希尔排序:从 O(n²) 到 O(n^1.3) 的性能飞跃
  • 电商网站开发平台浏览器wordpress如何使用一个的模板
  • 哪个网站可以做印章图案上海做网站报价
  • 建设科普网站手机站和网站有区别吗
  • 单北斗GNSS在大坝变形监测中的应用与技术分析
  • 做软装什么网站可以吗徐州专业网站制作
  • 网站建设 辉煌电商最新网络推广平台
  • 网站建设h5游戏工作室网络组建方案
  • 邯郸做wap网站的公司汽车行业做网站
  • 厚街做网站的公司给别人做网站必须有icp
  • 山东省建设文化传媒有限公司网站学做网站需要文化嘛
  • 网站建设目标个人博客dwwordpress上传图片改名
  • 淘宝联盟填网站备案网站能给企业带来什么
  • 网站建设的功能特点有哪些如何创建百度网站
  • 山西住房与城乡建设厅定额网站推广赚钱的项目
  • (自用)补充说明7
  • 台州网站关键字优化详情能打开任何网站的浏览器
  • 建站快车代理平台系统苏州网站开发公司兴田德润在那里
  • 当经济下滑时
  • 那些行业做网站优化的比较多主流搭建网站
  • 合肥网站建设cnfg泉州网站制作套餐
  • 西宁网站建设公司网站的毕业设计怎么做
  • 网站的后缀福州 网站设计公司
  • 漳州微网站建设哪家好做微信网站公司
  • 网站建设规划书 简版wordpress 短信通知
  • 济南网站建设团队设计本3d模型下载
  • 网站界面设计图片格子铺网站建设方案
  • wordpress网站公告优化算法有哪些
  • 网站运营数据周报表怎么做免费浏览器加速器