精华内容
下载资源
问答
  • 合并有序数组

    2016-05-26 11:25:36
    合并有序数组

    问题及代码:

    /*
     *Copyright (c)2016,大连东软信息学院
     
     *All rights reserved.
     
     *文件名称:合并有序数组 
     
     *作    者:陈振
     
     *完成日期:2016年5月26日
     
     *版 本 号: v1.0
     
     *问题描述:
     
     *程序输入:
     
     *程序输出:
    
     */
    #include<stdio.h>
    int mergeData(int[],int,int[],int,int[],int);
    int main()
    {
    	int a[20]={1,3,5,7,9},b[20]={2,4,6,8,10,11,12,13};
    	int c[20],l1=5,l2=8,l3,i,k;
    	k=mergeData(a,l1,b,l2,c,l3);
    	for(i=0;i<k;i++)
    	printf("%d ",c[i]);
    	printf("\n");
    	
    	
    	return 0;
    }
    int mergeData(int a[],int l1,int b[],int l2,int c[],int l3)
    {
    	int i=0,j=0,k=0;
    	while(i<l1&&j<l2){
    		if(a[i]<b[j])
    		  c[k++]=a[i++];
    		else
    		  c[k++]=b[j++];
    	}
    	while(i<l1)
    	c[k++]=a[i++];
    	while(j<l2)
    	c[k++]=b[j++];
    	return k;
    }

     运行结果:


    展开全文
  • 合并有序数组问题

    2019-02-15 14:57:08
    合并有序数组问题
                   

          感谢:感谢大家提出问题,首先对有问题的算法抱歉,文章中已经修改了代码的实现,欢迎大家再次提出问题。

          有这样一个问题,现在有两个有序的数组,第一个数组的空间足够容纳两个有序数组中的数,利用高效的方法把两个数组合并,并使得数组是有序的,且最后得到的是第一个数组,同时不借助其他额外的存储空间。

          其实这种题的解法几乎都是一样的,都是从最后一个数开始,这就是取极值的思想,因为数组是有序的,所以,每个数组中最大的那个数一定在数组的末尾。

          这里,先贴出代码,之后再讲解原理:

    #include <stdio.h>void insert(int *array1, int len1, int *array2, int len2);int main(int argc, char **argv)int array1[128] = {2, 3, 4, 7, 9, 10, 12}; int array2[8] = {1, 5, 11, 12, 14, 16, 18, 20}; int i = 0; insert(array1, 7, array2, 8); for(i = 0; i < 15; i++) {  printf("%d ", array1[i]); } printf("\n"); }void insert(int *array1, int len1, int *array2, int len2)int array1_pos = len1 - 1int array2_pos = len2 - 1int new_pos = len1 + len2 - 1if (array1 == NULL || array2 == NULL)  returnwhile (array2_pos >= 0 && array1_pos >= 0) {  if (array1[array1_pos] <=  array2[array2_pos])  {   array1[new_pos--] = array2[array2_pos--];  }  else  {   array1[new_pos--] = array1[array1_pos--];  } } while (array2_pos >= 0) {  array1[new_pos--] = array2[array2_pos--]; } return;}


          从代码中可以看出,首先在大的数组中找到合并后数组最后一个数字的位置,之后依次比较两个数组中尾部的值,并根据大小放入不同的位置,最后,直到一个数组的指针指向了负值则结束,这个算法的时间复杂度是 O(m + n)

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • C++合并有序数组

    2020-12-01 01:19:18
    合并有序数组 【问题描述】编写一个程序,将两个元素从小到大有序的一维数组归并成一个有序的一维数组。 【输入形式】用户在第一行输入第一个有序数组的元素数目,以回车结束此输入。然后在第二行按照刚才输入的元素...

    合并有序数组
    【问题描述】编写一个程序,将两个元素从小到大有序的一维数组归并成一个有序的一维数组。
    【输入形式】用户在第一行输入第一个有序数组的元素数目,以回车结束此输入。然后在第二行按照刚才输入的元素数目依次输入数组元素,中间用空格分隔,最后用回车结束输入。第三行和第四行只需重复刚才的步骤,将第二个有序数组也输入即可。输入时候一定是有序输入的,即数组元素已经按照从小到大顺序排列。
    【输出形式】程序将两个有序一维数组合并为一个有序数组并按照从小到大顺序输出。每个元素输出时用空格分隔,最后一个输出之后没有空格。
    【样例输入】
    6
    2 5 8 11 20 35
    4
    1 6 15 60
    【样例输出】1 2 5 6 8 11 15 20 35 60
    【样例说明】第一行输入为第一个有序数组的元素数目,第二行为有序数组元素;第三行为第二个有序数组的元素数目,第四行为有序数组元素。
    【评分标准】结果完全正确得20分。
    1.双指针

    #include<bits/stdc++.h>
    using namespace std;
    void print(int a[],int Len){
    	for(int i=0;i<Len;i++){
    		cout<<a[i]<<" ";
    	}
    }
    int main(){
    	int n,m;cin>>m;int a[50],b[50];
    	for(int i=0;i<m;i++){
    		cin>>a[i];
    	}
    	cin>>n;
    	for(int i=0;i<n;i++){
    		cin>>b[i];
    	}
    	int p1=m-1,p2=n-1,p=m+n-1;
    	while(p>=0){
    		if(p1<0)a[p]=b[p2--];
    		else if(p2<0)a[p]=a[p1--];
    		else if(a[p1]<=b[p2])a[p]=b[p2--];
    		else a[p]=a[p1--];
    		p--;
    	}
        print(a,m+n);
    }
    

    2.排序

    #include<bits/stdc++.h>
    using namespace std;
    void print(int a[],int Len){
    	for(int i=0;i<Len;i++){
    		cout<<a[i]<<" ";
    	}
    }
    int main(){
    	int n,m,len;cin>>n;int a[100];
    	for(int i=0;i<n;i++){
    		cin>>a[i];
    	}
    	cin>>m;len=m+n;
    	for(int i=n;i<len;i++){
    		cin>>a[i];
    	}
    	sort(a,a+m+n);
    	print(a,m+n);
    }
    

    3.选择排序

    #include<bits/stdc++.h>
    using namespace std;
    int max(int a[],int Len){
    	int maxi=0;
    	for(int i=0;i<Len;i++){
    		if(a[i]>a[maxi]){
    			maxi=i;
    		}
    	}
    	return maxi;
    }
    void mysort(int Len,int a[]){
    	for(int i=Len-1;i>=1;i--){
    		int maxid=max(a,i+1);
    		int t=a[maxid];
    		a[maxid]=a[i];
    		a[i]=t; 
    	}
    }
    void print(int a[],int Len){
    	for(int i=0;i<Len;i++){
    		cout<<a[i]<<" ";
    	}
    }
    int main(){
    	int n,m,len;cin>>n;int a[100];
    	for(int i=0;i<n;i++){
    		cin>>a[i];
    	}
    	cin>>m;len=m+n;
    	for(int i=n;i<len;i++){
    		cin>>a[i];
    	}
    	mysort(m+n,a);
    	print(a,m+n);
    }
    
    展开全文
  • 主要介绍了合并有序数组的实现(java与C语言)的相关资料,这里对有序数组的合并分享了java版本和C语言版本的示例,需要的朋友可以参考下
  • 想了解Python3合并两个有序数组代码实例的相关内容吗,天外归云在本文为您仔细讲解Python3合并有序数组的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Python3,合并,有序数组,下面大家一起来学习吧。...

    想了解Python3合并两个有序数组代码实例的相关内容吗,天外归云在本文为您仔细讲解Python3合并有序数组的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Python3,合并,有序数组,下面大家一起来学习吧。

    第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好)

    第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0。然后再把不为空的老数组中剩下的部分加到新数组的结尾。(好)

    第二种思路的排序算法与测试代码如下:

    def merge_sort(a, b):

    ret = []

    while len(a)>0 and len(b)>0:

    if a[0] <= b[0]:

    ret.append(a[0])

    a.remove(a[0])

    if a[0] >= b[0]:

    ret.append(b[0])

    b.remove(b[0])

    if len(a) == 0:

    ret += b

    if len(b) == 0:

    ret += a

    return ret

    if __name__ == '__main__':

    a = [1,3,4,6,7,78,97,190]

    b = [2,5,6,8,10,12,14,16,18]

    print(merge_sort(a, b))

    反思了一下上面的过程,不应该用remove方法,因为仔细想一下remove方法可能比较耗时,不算最简单。

    改进一下,改用索引元素比较法替代头位元素比较法:

    def merge_sort(a, b):

    ret = []

    i = j = 0

    while len(a) >= i + 1 and len(b) >= j + 1:

    if a[i] <= b[j]:

    ret.append(a[i])

    i += 1

    else:

    ret.append(b[j])

    j += 1

    if len(a) > i:

    ret += a[i:]

    if len(b) > j:

    ret += b[j:]

    return ret

    if __name__ == '__main__':

    a = [1,3,4,6,7,78,97,190]

    b = [2,5,6,8,10,12,14,16,18]

    print(merge_sort(a, b))

    这个基本就是最简单的方法了。

    相关文章

    展开全文
  • [数据结构]合并有序数组

    千次阅读 2015-12-01 16:02:39
    合并有序数组
  • import java.util.Arrays;/*** @author Srao* @className MergeK* @date 2019/12/20 23:24* @package com.rao.algorithm* @Description 合并K个有序数组*/public class MergeK {public static in...
  • Function: 合并有序数组<br/> * [1, 2, 2, 5] * [3, 4, 7, 8] * * */ 分析 双指针移动从前往后的比较 代码 public static int[] mergeSortArray(int[] a, int[] b){ int length1 = a.length, length2 ...
  • 合并有序数组 题目地址: https://leetcode-cn.com/problems/merge-sorted-array/ 题目: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 nums1 ...
  • 合并有序数组/链表

    2020-08-03 04:57:38
    合并有序数组并保存在nums1中 class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: p1 = m - 1 p2 = n - 1 p = m + n - 1 while p1 >= 0 and p2 >= 0: ...
  • 合并有序数组的实现java版本:实例代码public class Merge {//合并有序数组public static void mergeSort(int a[], int b[], int c[]) {int n = a.length, m = b.length;int i, j, k;i = j = k = 0;while (i < n ...
  • 合并有序数组 时间O(n) 空间O(1) 算法设计与分析 王晓东 第3版 第4版 个人原创
  • leecode学习记录leecode学习记录七合并有序数组解题思路代码总结 leecode学习记录七 合并有序数组 难度:简单 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 ...
  • 关于合并有序数组/链表的总结

    千次阅读 2016-12-25 21:25:02
    通过最近的研究,发现好多公司...主要有合并两个有序数组和合并两个有序单链表(可扩展考虑如何合并K个有序链表),本博客中,对合并有序数组和合并有序链表做了一个总结,以便自己接下来的翻阅,也为了给小伙伴分享。
  • 给定两个按照升序排列的数组,请把它们合成一个升序数组并...//合并有序数组 int main() { int a,b,c,k,i,j,A[100],B[100]; scanf("%d",&a); //进行数组a的输入 for(i=0;i<a;i++) scanf("%d",&A[i]);

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,160
精华内容 2,864
关键字:

合并有序数组