算法基础
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;} 
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号