zoukankan      html  css  js  c++  java
  • 5大常用算法-分治法

    1. 二分查找

    2. 归并排序

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void merge(int arr[],int left,int mid,int right,int temp[]);
    void sort(int a[],int left,int right,int t[]);
    
    void main(){
        int a[10]={2,3,7,8,4,6,5,9,1,10};
        int b[10],i;
        sort(a,0,9,b);
        for(i=0;i<10;i++){
            printf("%d ",a[i]);
        }
        printf("
    ");
    }
    
    //将arr[left,mid]和arr[mid+1,right]合并
    //图解:https://www.cnblogs.com/chengxiao/p/6194356.html
    void merge(int arr[],int left,int mid,int right,int temp[]){
        int i=left,j=mid+1,t=left;
        while(i<=mid && j<=right){
            if(arr[i]<arr[j]){
                temp[t++]=arr[i++];
            }else{
                temp[t++]=arr[j++];
            }
        }
        while(i<=mid){
            temp[t++]=arr[i++];
        }
        while(j<=right){
            temp[t++]=arr[j++];
        }
        //将排序好的序列复制回原数组
        for(i=left;i<=right;i++){
            arr[i]=temp[i];
        }
    }
    
    void sort(int a[],int left,int right,int t[]){
        if(left<right){
            int mid=(left+right)/2;
            sort(a,left,mid,t);
            sort(a,mid+1,right,t);
            merge(a,left,mid,right,t);
        }
    }

     3. 大数相乘

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void bigmulti(char *a,char *b,int tmp[]);
    
    void main(){
        char a[100],b[100];
        scanf("%s",&a);
        scanf("%s",&b);
        int t[strlen(a)+strlen(b)];
        memset(t,0,sizeof(t));
        bigmulti(a,b,t);        
        printf("
    ");
    }
    
    void bigmulti(char *a,char *b,int tmp[]){
        int alen=strlen(a);
        int blen=strlen(b);
        int i,j;
        for(i=0;i<alen;i++){
            for(j=0;j<blen;j++){
                tmp[i+j+1] += ((a[i]-'0')*(b[j]-'0'));//此处设为i+j+1方便下面的进位
            }   
        }   
    
        for(i=alen+blen-1;i>0;i--){
            if(tmp[i]>10){
                tmp[i-1]+=(tmp[i]/10);
                tmp[i]=tmp[i]%10;
            }   
        }   
    
        for(i=0;i<alen+blen;i++){
            if(tmp[i]==0)
                continue;
            printf("%d",tmp[i]);
        }   
    
    }

     参考:http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html

  • 相关阅读:
    传递函数笔记
    模糊控制算法详细讲解
    SDRAM学习笔记
    基于STM32的CRC校验说明
    如何把图片设置成24位图/8位图??
    C2MIF软件使用说明
    ROM和RAM的内存详细说明
    Logback配置
    Logback使用
    common-logging源码解析
  • 原文地址:https://www.cnblogs.com/stellar/p/8797401.html
Copyright © 2011-2022 走看看