• 归并排序C程序详解


    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    
    using namespace std;
    //归并算法
    void merge(int *a,int begin1, int end1, int begin2, int end2, int *tmp)
    {
    	//进行划分为[begin1,end1],[begin2,end2]的双区间,一个tmp表示为,只要传进一个tmp就可以不用每次开辟新的tmp数组了
    	int index=begin1;
    	int i=begin1,j=begin2;
    	while (i<=end1&&j<=end2){//小的进行归并
    		if (a[i]<=a[j]) tmp[index++]=a[i++];
    		else tmp[index++]=a[j++];
    	}
    	while (i<=end1) tmp[index++]=a[i++];//1数组未结束,归并1数组
    	while (j<=end2) tmp[index++]=a[j++];//2数组未结束,归并2数组
    	memcpy(a+begin1,tmp+begin1,sizeof(int)*(end2 - begin1 + 1));//开呗至原数组
    }
    //归并排序
    void MergeSort(int *a, int left, int right, int *tmp)
    {
    	if(left>=right) return;//左大于右,返回
    	int mid=left+((right-left)>>1);//取mid值
    	MergeSort(a,left,mid,tmp);//进行left到mid进行递归
    	MergeSort(a,mid+1,right,tmp);//进行right到mid进行递归
    	merge(a,left,mid,mid+1,right,tmp);//归并
    }
    
    int main(){
        int a[]={3,7,0,40,25,10,2,1};
    	int *tmp=(int*)malloc(sizeof(int)*(sizeof(a)/sizeof(int)));
    	memset(tmp,-1,sizeof(a)/sizeof(int));
    	MergeSort(a,0,sizeof(a)/sizeof(int)-1, tmp);
    	for(int i=0;i<sizeof(a)/sizeof(int);i++) cout<<a[i]<<" ";
        system("pause");
        return 0;
    }
    
  • 相关阅读:
    字典-字典练习
    元组
    切片
    列表-列表练习
    一个登录小程序
    py定义变量-循环-条件判断
    charles抓包
    接口测试-Http状态码-postman上传文件
    jm解决乱码问题-参数化-数据库操作-文件上传下载
    (二)CRLF注入
  • 原文地址:https://www.cnblogs.com/littlepage/p/11648293.html
Copyright © 2020-2023  润新知