zoukankan      html  css  js  c++  java
  • 《算法三》(归并排序)

    分治思想:分而治之
    归并排序:递归的拆分+合并
      合并:两个有序数组合并为一个有序数组
      1.准备临时数组
      2.将数据元素依序放到临时数组中
      3.将数据元素从临时数组拷贝回到原数组中,释放临时数组

    代码演示:

    #include<iostream>
    #include<vector>
    #include<string.h>
    #define NUM 10
    
    void print_art(int* a, int len){
    	for(int i=0; i<len; i++){
    		printf("%d ", a[i]);
    	}
    	printf("
    ");
    } 
    
    //合并函数
    //有序数组1:L~M  有序数组2:M+1~R 
    void merge_sort(int* a, int L, int M, int R){
    	//合并函数三步走:
    	//1.准备临时数组
    	//2.将数据元素依序放到临时数组中
    	//3.将数据元素从临时数组拷贝回到原数组中,释放临时数组
    	
    	int len = R - L + 1;//临时数组大小 
    	int* temp = new int[len];//临时数组
    	int k = 0;//临时数组下标 
    	int left = L;//数组1起始位置下标 
    	int right = M+1;//数组2起始位置下标  
    	
    	while(left<=M && right<=R){
    		if(a[left] < a[right]){
    			temp[k++] = a[left++];
    		}else{
    			temp[k++] = a[right++];
    		}
    	}
    	while(left<=M){//如果数组1还有剩余 
    		temp[k++] = a[left++];
    	}
    	while(right<=R){//如果数组2还有剩余 
    		temp[k++] = a[right++];
    	}
    	
    	//重点:memcpy时候应该放a+L位置 
    	memcpy(a+L, temp, sizeof(int)*len);
    	
    	delete[] temp;
    	temp = NULL;
    }
    	  
    //归并排序 
    void mergesort(int* a, int L, int R){
    	if( L==R ) return ;
    	int m = L + (R - L ) / 2;
    	mergesort(a, L, m);//拆分左边 
    	mergesort(a, m+1, R);//拆分右边 
    	merge_sort(a, L, m, R);//左右两边合并 
    } 
    	  
    	  
    int main(){
    	int a[NUM] = {1, 3, 5, 7, 9, 0, 2, 4, 6, 8};
    	mergesort(a, 0, 9);
    	merge_sort(a, 0, 4, 9); 
    	print_art(a, NUM);
    	return 0;
    }
    

     代码重点:memcpy时候应该放a+L位置 

          memcpy(a+L, temp, sizeof(int)*len);

    memcpy函数:

        void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字符到存储区 str1

  • 相关阅读:
    据说很少有看到第13个不笑的
    亲个嘴竟然有这么大的学问
    让人心疼的12句话,哪句说到你的痛了
    IDEAd代码注释插件使用javadoc
    连接linux里面的数据库
    代码版本管理工具,定要先更新后提交,git提交本地,推送远程
    visual studio 新特性展望假新闻
    (转)一个美国老工程师的心理话: 给年轻工程师的十大忠告
    随想一
    HongYing HtmlViewer
  • 原文地址:https://www.cnblogs.com/Whgy/p/12284625.html
Copyright © 2011-2022 走看看