zoukankan      html  css  js  c++  java
  • 归并排序

    /*=============================================================================
    #
    #	   分治为子序列
    #          归并排序
    #	
    #
    =============================================================================*/
    #include <stdio.h>
    #include <time.h>
    #include <malloc.h>
    
    	int arr[]={6, 3, 5, 7, 2, 4, 1, 8, 10, 9};
    
    
    //把数组合并
    void merg_array(int *a1,int len1,int *a2,int len2)
    {
    	int i=0,j=0,k=0;
    	int *arr_temp=(int *)malloc(sizeof(int)*(len1+len2));
    
    	while(i<len1&&j<len2)
    		arr_temp[k++]=a1[i]<a2[j]? a1[i++]:a2[j++];
    	
    	//a2已经为空,把a1中剩余的数搬到arr_temp中去就可以了
    	while(i<len1)
    		arr_temp[k++]=a1[i++];
    	
    	while(j<len2)
    		arr_temp[k++]=a2[j++];
    	
    	for(i=0,k=0;i<len1+len2;++i,++k)
    		a1[i]=arr_temp[k];
    	
    	free(arr_temp);
    }
    
    //
    void merg_sort(int *a,int len)
    {
    	//结束条件
    	if(len<=1)
    		return;
    	int *a1,*a2,len1,len2;
    	len1=len/2;	len2=len-len1;	a1=a;	a2=a+len1;
    	
    	//分治调用
    	merg_sort(a1,len1);
    	merg_sort(a2,len2);
    	
    	//分治结束,合并两个子数组
    	merg_array(a1,len1,a2,len2);
    
    }
    
    int main()
    {
    
    	int len=sizeof(arr)/sizeof(arr[0]);
    	merg_sort(arr,len);
    	for(int i=0;i<len;++i)
    		printf("%d ",arr[i]);
    	return 0;
    }

  • 相关阅读:
    springMVC总结
    spring总结
    dubbo文档
    mysql集群
    JVM-优化
    JVM-GC日志打印
    JVM-垃圾回收
    JVM-问题定位示例
    C++11
    《疯狂的程序员》
  • 原文地址:https://www.cnblogs.com/sjw1357/p/3864010.html
Copyright © 2011-2022 走看看