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

  • 相关阅读:
    vue 客户端渲染和服务端渲染
    js 数组对象深拷贝
    vue template标签
    vue watch的高级用法
    js对象数组去重
    移动端触发touchend后阻止click事件
    重读JS(四)数据类型、作用域和内存问题
    重读JS(三)基本概念
    vue项目
    [vue问题解决]vue <router-link>在浏览器上点击失效(路由不跳转)
  • 原文地址:https://www.cnblogs.com/stellar/p/8797401.html
Copyright © 2011-2022 走看看