zoukankan      html  css  js  c++  java
  • 用归并算法合并两个有序数组

    #include  <iostream>
    using namespace std;
    //用归并算法合并两个数组
    //时间复杂度是O(n),空间复杂度为O(n)
    //该算法的关键点是:把两个数组看成是独立的,分开索引,也就是index_1,index_2两个变量的变化(对个人而言)
    int main()
    {
        int arr1[4] = { 3, 5, 8, 11 };
        int arr2[7] = { 2, 6, 8, 9, 11, 15, 20 };
        int length = 0;                            //合并后需要数组的长度
        int index_1 = 0, index_2 = 0;            //两个数组的索引值
        int i = 0;                                //内存空间的叠加计数变量
        length = sizeof(arr1) / sizeof(int)+sizeof(arr2) / sizeof(int); //求出长度
        //cout << length;
        int *p = new int[length];  //定义一个指向数据的指针
        while ((index_1 < sizeof(arr1) / sizeof(int)) && (index_2 < sizeof(arr2) / sizeof(int))) //归并算法核心
        {
            if (arr1[index_1] <= arr2[index_2])
            {
                *(p + i) = arr1[index_1];
                index_1++;
            }
            else
            {
                *(p + i) = arr2[index_2];
                index_2++;
            }
            i = i + 1;
        }
        while ((index_2 < sizeof(arr2) / sizeof(int)))
        {
            *(p + i) = arr2[index_2];
            index_2++;
            i = i + 1;
        }
        while ((index_1 < sizeof(arr1) / sizeof(int)))
        {
            *(p + i) = arr1[index_1];
            index_1++;
            i = i + 1;
        }
        for (int j = 0; j < i; j++)  //打印
        {
            cout << *(p + j) << ' ';
        }
        cout << endl;
        delete [] p;  //释放内存
    
        return 0;
    }

  • 相关阅读:
    CCF201509-3 模板生成系统(100分)
    CCF201509-3 模板生成系统(100分)
    CCF201512-3 画图(100分)
    CCF201512-3 画图(100分)
    CCF201403-3 命令行选项(100分)
    CCF201403-3 命令行选项(100分)
    Java---jdk与jre的区别
    Java--- J2EE、Java SE、Java EE、Java ME 区别
    Java---java ee和j2ee
    Java---null
  • 原文地址:https://www.cnblogs.com/panlangen/p/8066992.html
Copyright © 2011-2022 走看看