zoukankan      html  css  js  c++  java
  • 归并排序 非递归 不回写

    #include<iostream>
    using namespace std;
    void Merge(int a[],int b[],int first,int mid,int last)//合并两个有序数组
    {
    int p=first,q=mid+1;
    int pos=first;
    while(p<=mid&&q<=last)
    {
    if(a[p]<a[q])
    {
    b[pos++]=a[p++];
    }
    else
    {
    b[pos++]=a[q++];
    }
    }
    if(p<=mid)
    {
    while(p<=mid)
    {
    b[pos++]=a[p++];
    }
    }
    else
    {
    while(q<=last)
    {
    b[pos++]=a[q++];
    }
    }
    }

    void Merge_pass(int a[],int b[],int gap,int n)//合并指定步长的两个数组
    {
    int i=0;
    int j=0;
    while(i<=n-2*gap+1)
    {
    Merge(a,b,i,i+gap-1,i+gap*2-1);
    i=i+gap*2;
    }
    if(i<(n-gap))//剩的数据多于一个步长,少于两个步长
    Merge(a,b,i,i+gap-1,n-1);
    else
    for(j=i;j<n;j++)
    {
    b[j]=a[j];
    }
    }


    void Merge_sort(int a[],int b[],int n)//非递归 不回写
    {
    int gap=1;
    while(gap<n)
    {
    Merge_pass(a,b,gap,n);//a b和b a交替
    gap=gap*2;
    Merge_pass(b,a,gap,n);
    gap=gap*2;
    }
    }

    int main()
    {
    int a[10]={9,2,3,7,1,8,4,6,5,0};
    int b[10];
    Merge_sort(a,b,10);
    for(int i=0;i<10;i++)
    cout<<a[i]<<endl;
    system("pause");
    return 0;
    }

  • 相关阅读:
    IDEA中classpath
    Java之泛型<T> T与T的用法
    反射机制
    vue mitt 解决多次触发问题
    input限制输入
    解决idea启动端口被占用
    前端压缩图片转base64
    对Bootstrap Table 表格进行封装
    vue项目本地运行
    vue项目搭建
  • 原文地址:https://www.cnblogs.com/earendil/p/4000978.html
Copyright © 2011-2022 走看看