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

工作中存在的问题和不足优化设计单元测试卷

工作中存在的问题和不足,优化设计单元测试卷,网站文章突然不收录,wordpress如何搭建在局域网一、非递归 基本思想: 归并排序( MERGE-SORT )是建立在归并操作上的一种有效的排序算法 , 该算法是采用分治法( Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列&#x…

一、非递归

基本思想:
归并排序( MERGE-SORT )是建立在归并操作上的一种有效的排序算法 , 该算法是采用分治法( Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并排序核心步骤:
归并:如果左区间和右区间都有序,那么一次比较,小的尾插到新空间,链表可以摘下来插入,数组不行,得借助新空间
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void _MergeSort(int* a, int begin, int end, int* temp)
{if (begin>=end)return;int mid = (begin + end) / 2;//[begin,mid] [mid+1,end]如果这两个区间有序,那么可以归并了_MergeSort(a, begin, mid, temp);_MergeSort(a, mid+1, end, temp);//[begin, mid] [mid + 1, end]归并int begin1 = begin, end1 = mid;int begin2 = mid+1, end2 = end;int i = begin;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){temp[i] = a[begin1];i++;begin1++;}else{temp[i] = a[begin2];i++;begin2++;}}//谁没结束谁++来拷贝,由于不知道是哪个区间没有结束,所有都写一遍while (begin1 <= end1){temp[i] = a[begin1];i++;begin1++;}while (begin2 <= end2){temp[i] = a[begin2];i++;begin2++;}//等把所有数都放到temp数组上时,再拷贝回去memcpy(a+begin, temp+begin,sizeof(int)*(end-begin+1));
}
void MergeSort(int* a, int n)
{int* temp = (int*)malloc(sizeof(int) * n);if (temp == NULL){perror("malloc fail\n");return;}_MergeSort(a, 0, n - 1, temp);free(temp);
}
int main()
{int a[] = {10,6,7,1,3,9,4,2 };MergeSort(a,8);for (int i = 0; i < 8; i++){printf("%d ", a[i]);}return 0;
}

注:以下图片看不清楚可以点进去放大看

二、递归 

不能用栈,栈是前序,而归并是后序
方法:
能不能依次依次往后算?算完第一个和第二个后算第三个和第四个,再算第五个和第六个.......
第一次归完后再拷贝回去后四个四个一归.....

必须得注意细节:如果是奇数个数那么得注意边界

 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void Swap(int* a, int* b)
{int temp = *a;*a = *b;*b = temp;
}
void _MergeSort(int* a, int begin, int end, int* temp)
{if (begin >= end)return;int mid = (begin + end) / 2;//[begin,mid] [mid+1,end]如果这两个区间有序,那么可以归并了_MergeSort(a, begin, mid, temp);_MergeSort(a, mid + 1, end, temp);//[begin, mid] [mid + 1, end]归并int begin1 = begin, end1 = mid;int begin2 = mid + 1, end2 = end;int i = begin;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){temp[i] = a[begin1];i++;begin1++;}else{temp[i] = a[begin2];i++;begin2++;}}//谁没结束谁++来拷贝,由于不知道是哪个区间没有结束,所有都写一遍while (begin1 <= end1){temp[i] = a[begin1];i++;begin1++;}while (begin2 <= end2){temp[i] = a[begin2];i++;begin2++;}//等把所有数都放到temp数组上时,再拷贝回去memcpy(a + begin, temp + begin, sizeof(int) * (end - begin + 1));
}
void MergeSort(int* a, int n)
{int* temp = (int*)malloc(sizeof(int) * n);if (temp == NULL){perror("malloc fail\n");return;}int gap = 1;while (gap < n){for (int i = 0; i < n; i += 2 * gap){int begin1 = i, end1 = i + gap - 1;int begin2 = i + gap, end2 = i + 2 * gap - 1;int j = i;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){temp[j] = a[begin1];j++;begin1++;}else{temp[j] = a[begin2];j++;begin2++;}}//谁没结束谁++来拷贝,由于不知道是哪个区间没有结束,所有都写一遍while (begin1 <= end1){temp[j] = a[begin1];j++;begin1++;}while (begin2 <= end2){temp[j] = a[begin2];j++;begin2++;}//等把所有数都放到temp数组上时,再拷贝回去memcpy(a + begin, temp + begin, sizeof(int) * (end - begin + 1));}gap *= 2;}free(temp);
}
int main()
{int a[] = {10,6,7,1,3,9,4,2 };MergeSort(a,8);for (int i = 0; i < 8; i++){printf("%d ", a[i]);}return 0;
}

 

http://www.dtcms.com/wzjs/22995.html

相关文章:

  • 名字做头诗的网站媒体网站
  • 找人开发软件去什么网站百度搜索下载app
  • 网站建设与维护制作网页上海关键词排名优化价格
  • wordpress淘客采集插件百度排名优化
  • 山东省建设厅网站地址舆情网站
  • 锡盟本地网站建设山东一级造价师
  • dede中英文企业网站企业为何选择网站推广外包?
  • 网站优化优化怎么做百度如何推广网站
  • 株洲网站建设的公司怎么找智慧软文发稿平台
  • 怎么制作自己的网页沈阳关键词优化报价
  • 建设360导航网站的目的是什么意思静态网站模板
  • 农产品网站建设投标书最好的免费信息发布平台
  • 做租人网站犯法吗外链工具软件
  • 做科普网站网站结构
  • 牌具做网站常用的网络推广的方法有哪些
  • 新网站如何做网站优化免费建站的网站哪个好
  • 做一普通网站需要多少钱网站制作的基本流程
  • ppt网站链接怎么做推广赚钱软件
  • 厦门网站做优化外贸建站推广公司
  • linux xampp wordpress澳门seo推广
  • 企业网站的建设目的包含什么太原网站建设方案咨询
  • 怎样创建网站image目录文件谷歌推广效果怎么样
  • 网站建设地基本流程网站的推广方式有哪些
  • 电子商务网站建设与管理教材评价免费下载百度一下
  • 下载做蛋糕网站独立站推广
  • 网站构建建设案例展示培训网登录入口
  • 深度网络站长之家seo查询
  • 电商平台网站制作百度关键词优化教程
  • 找别人做网站可靠吗友情链接的作用
  • 创什么网站吸引人seo在线培训机构排名