归并算法的实现
来源:互联网 发布:什么是淘宝直通车? 编辑:程序博客网 时间:2024/06/14 07:01
#include<stdio.h>#include <stdlib.h>void merge(int arr[],int low,int mid,int high){int i,k;int *tmp = (int *)malloc((high-low+1)*sizeof(int));int left_low=low,left_high=mid;int right_low=mid+1,right_high=high;//对左右两个数组进行比较for(k=0;left_low<=left_high && right_low<=right_high;k++){if(arr[left_low]<arr[right_low])tmp[k]=arr[left_low++];elsetmp[k]=arr[right_low++];} if(left_low <= left_high){ //若第一个序列有剩余,直接复制出来粘到合并序列尾 //memcpy(tmp+k, arr+left_low, (left_high-left_low+l)*sizeof(int)); for(i=left_low;i<=left_high;i++) tmp[k++] = arr[i]; } if(right_low <= right_high){ //若第二个序列有剩余,直接复制出来粘到合并序列尾 //memcpy(tmp+k, arr+right_low, (right_high-right_low+1)*sizeof(int)); for(i=right_low; i<=right_high; i++) tmp[k++] = arr[i]; } for(i=0; i<high-low+1; i++) arr[low+i] = tmp[i];return;}void merge_sort(int arr[], unsigned int first, unsigned int last){ int mid = 0;int i; if(first<last){ mid = (first+last)/2; merge_sort(arr, first, mid); merge_sort(arr, mid+1,last); merge(arr,first,mid,last); } return;}int main(){int i;int a[10]={9,8,7,6,5,4,3,2,1,0};for(i=0;i<10;i++)printf("%d ",a[i]);merge_sort(a,0,9);printf("\n");for(i=0;i<10;i++)printf("%d ",a[i]);return 0;}
难点:函数递归调用的理解较为复杂
阅读全文
0 0
- 归并算法的实现
- 归并算法的实现
- 归并排序的算法实现
- 归并排序算法的实现
- 归并排序算法的实现
- 归并排序的算法实现
- 归并排序的算法实现
- 归并排序算法的实现
- 归并算法的Java实现
- 归并排序算法的JAVA实现
- 归并排序算法的JAVA实现
- 归并排序算法的JAVA实现
- 归并排序算法的JAVA实现
- 归并排序算法的JAVA实现
- 归并排序算法的JAVA实现
- 数组归并排序算法的一种实现
- C#下的归并排序算法实现
- 归并排序算法的java实现
- 异常 数组打印
- 154. Find Minimum in Rotated Sorted Array II
- 让安卓模拟器访问本地服务器
- python3里面的range()函数
- 02-面向对象(包-包之间访问-protected).1 2 3 03-面向对象(包-导入import)
- 归并算法的实现
- 深度学习必备:通过VNC连接ubuntu(linux)工作站
- 机器学习实战笔记-K近邻算法2(改进约会网站的配对效果)
- poj1753Flip Game【刷题计划】
- Course 4-Convolutional Neural Networks--Week 2
- Spring(二)基于注解的方式配置Bean
- C++ operator关键字(重载操作符)
- Pandas中修改DataFrame列名
- 我要写算法(一)—— 最快最简单排序之桶排序