zoukankan      html  css  js  c++  java
  • 算法基础

    2.1 插入排序

    C++实现:

    #include<iostream>
    using namespace std;
     
    void InsertSort(int arr[],int n)
    {
        int i,j,key;
        for(i=1;i<n;++i)
        {
            key=arr[i];
            j=i-1;
            while(j>=0&&key<arr[j])
            {
                arr[j+1]=arr[j];
                j--;
            }
            arr[j+1]=key;
        }
    }
     
    int main()
    {
        int arr[10]={14,25,53,23,2,6,74,34,67,39};
        InsertSort(arr,10);
        for(auto a:arr)
            cout<<a<<' ';
        cout<<endl;
    }

    2.3 分治法

    合并操作代码

    #include<iostream>
    using namespace std;
     
    void Merge(int arr[],int p,int q,int r)
    {
        int i=0,j=0;
        int k;
        int n1=q-p+1;
        int n2=r-q;
        int temp[r-p+1];
        for(k=0;k<r-p+1;++k)
        {
            if(i<n1&&j<n2&&arr[p+i]<=arr[q+1+j])
            {
                temp[k]=arr[p+i];
                i++;
            }
            else if(i<n1&&j<n2&&arr[p+i]>arr[q+1+j])
            {
                temp[k]=arr[q+1+j];
                j++;
            }
            else if(i==n1||j==n2)
                break;
        }
        while(j<n2)
        {
            temp[k++]=arr[q+1+j];
            j++;
        }
        while(i<n1)
        {
            temp[k++]=arr[p+i];
            i++;
        }
        for(k=0;k<r-p+1;++k)
            cout<<temp[k]<<' ';
        cout<<endl;
    }
     
    int main()
    {
        int arr[10]={1,6,9,12,56,2,31,45,67,78};
        Merge(arr,0,4,9);
    }

    2.3.1 合并排序

    #include<iostream>
    using namespace std;
    void Merge(int arr[],int p,int q,int r);
    void MergeSort(int arr[],int p,int r)
    {
        int q;
        if(p < r) //只有一个或无记录时不须排序
        {
            q = (int)((p+r)/2);      //将data数组分成两半
            MergeSort(arr, p, q);   //递归拆分左数组
            MergeSort(arr, q+1, r); //递归拆分右数组
            Merge(arr, p, q, r);    //合并数组
        }
    }
     
    /*int main()
    {
        int arr[10]={1,6,8,2,4,9,67,34,27,89};
        MergeSort(arr,0,9);
    }*/
    int main()
    {
        int arr[10]={1,23,55,67,89,2,34,57,76,90};
        int k;
        for(k=0;k<10;++k)
        {
            cout<<arr[k]<<" ";
        }
        cout<<endl;
        MergeSort(arr,0,9);
        for(k=0;k<10;++k)
        {
            cout<<arr[k]<<" ";
        }
        cout<<endl;
    }
     
    void Merge(int arr[],int p,int q,int r)
    {
        int i,j,k;
        int n1=q-p+1;
        int n2=r-q;
        int left[n1],right[n2];
        for(i=0; i<n1;i++)  //对左数组赋值
            left[i] = arr[p+i];
        for(j=0; j<n2;j++)  //对右数组赋值
            right[j] =arr[q+1+j];
        i=j=0;
        k=p;
        while(i<n1&&j<n2)
        {
            if(left[i]<=right[j])
            {
                arr[k++]=left[i++];
            }
            else
            {
                arr[k++]=right[j++];
            }
        }
        while(j<n2)
        {
            arr[k++]=right[j++];
        }
        while(i<n1)
        {
            arr[k++]=left[i++];
        }
    }
     
    或者
    //Merge.cpp
    #include<iostream>
    using namespace std;
     
    void Merge(int arr[],int p,int q,int r)
    {
        int i=0,j=0;
        int k;
        int n1=q-p+1;
        int n2=r-q;
        int temp[r-p+1];
        for(k=0;k<r-p+1;++k)
        {
            if(i<n1&&j<n2&&arr[p+i]<=arr[q+1+j])
            {
                temp[k]=arr[p+i];
                i++;
            }
            else if(i<n1&&j<n2&&arr[p+i]>arr[q+1+j])
            {
                temp[k]=arr[q+1+j];
                j++;
            }
            else if(i==n1||j==n2)
                break;
        }
        while(j<n2)
        {
            temp[k++]=arr[q+1+j];
            j++;
        }
        while(i<n1)
        {
            temp[k++]=arr[p+i];
            i++;
        }
        for(k=0;k<r-p+1;++k)
            arr[p++]=temp[k];
    }
     
    //MergeSort.cpp
    #include<iostream>
    using namespace std;
    void Merge(int arr[],int p,int q,int r);
    void MergeSort(int arr[],int p,int r)
    {
        int q;
        if(p < r) //只有一个或无记录时不须排序
        {
            q = ((p+r)/2);      //将data数组分成两半
            MergeSort(arr, p, q);   //递归拆分左数组
            MergeSort(arr, q+1, r); //递归拆分右数组
            Merge(arr, p, q, r);    //合并数组
        }
    }
     
    /*int main()
    {
        int arr[10]={1,6,8,2,4,9,67,34,27,89};
        MergeSort(arr,0,9);
    }*/
    int main()
    {
        int arr[10]={1,23,55,67,89,2,34,57,76,90};
        int k;
        for(k=0;k<10;++k)
        {
            cout<<arr[k]<<" ";
        }
        cout<<endl;
        MergeSort(arr,0,9);
        for(k=0;k<10;++k)
        {
            cout<<arr[k]<<" ";
        }
        cout<<endl;
    }
  • 相关阅读:
    Java中的File类
    scala语法
    Spark核心原理
    资源调度器
    YARN工作机制
    MapReduce原理和工作过程
    序列化
    Hbase(2)表的设计和Rowkey等的设计
    Hbase(1)架构和工作原理
    Exception in thread "main" java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.metric()Lio/netty/buffer/PooledByteBufAllocatorMetric;
  • 原文地址:https://www.cnblogs.com/alantu2018/p/8461771.html
Copyright © 2011-2022 走看看