原题:

假设有两个有序的整型数组int *a1, int *a2,长度分别为m和n.试用C语言写出一个函数选取两个数组中最大的K个值(K可能大于m+n)写到int *a3中,保持a3降序,并返回a3实际的长度。

函数原型为int merge(int *a3, int *a1, int m, int *a2, int n, int k)
解题思路:此题为两个有序数组的合并:
 设置两个下标索引 i和j,逐个比较a1[i]和a2[j],大的进入a3;
 当a1或者a2已经全部被排序,就将另一个数组部分拷贝到a3.
  1. #include <stdio.h>
  2. int merge(int *a3, int *a1, int m, int *a2, int n, int k)
  3. {
  4. int i, j, t;
  5. if(k > m+n)
  6. k = m+n;
  7. for(i = 0, j = 0,  t = 0; t < k; t++)
  8. {
  9. if(i == m) //若a1片段已经全部被排序
  10. {
  11. while(j <= k-m)
  12. a3[t++] = a2[j++];
  13. break;
  14. }
  15. else if(j == n)  //若a2片段已经全部被排序
  16. {
  17. while(i <= k-n)
  18. a3[t++] = a2[i++];
  19. break;
  20. }
  21. if(a1[i] > a2[j])
  22. {
  23. a3[t] = a1[i];
  24. i++;
  25. }
  26. else if(a1[i] <= a2[j])
  27. {
  28. a3[t] = a2[j];
  29. j++;
  30. }
  31. }
  32. return k;
  33. }
  34. int main()
  35. {
  36. int a1[7] = {19,14,13,12,9,6,5};
  37. int a2[9] = {100,56,34,16,10,7,6,3,1};
  38. int a3[20];
  39. int len, k, i;
  40. for(i = 0; i<7; i++)
  41. printf(" %d ", a1[i]);
  42. printf("/n");
  43. for(i = 0; i<9; i++)
  44. printf(" %d ", a2[i]);
  45. printf("/n");
  46. printf("insert k =");
  47. scanf("%d", &k);
  48. len = merge(&a3, &a1, 7, &a2, 9, k);
  49. for(i = 0; i < len; i++)
  50. printf(" %d ", a3[i]);
  51. printf("/n");
  52. printf("len = %d/n", len);
  53. system("pause");
  54. }

选取两个有序数组中最大的K个值,降序存入另一个数组中的更多相关文章

  1. SQL将一个表中的某一列值全部插入到另一个表中

    1.  SQL将一个表中的某一列值全部插入到另一个表中 插入的话: insert into a(col) select col from b; 更新的话: update a set col=selec ...

  2. #有如下值集合[11,22,33,44,55,66,77,88,99,90...],将所有大于66值保存至字典的一个key中,将小于66的值保存至大二个key的值

    #!/usr/bin/env python #有如下值集合[11,22,33,44,55,66,77,88,99,90...],将所有大于66值保存至字典的一个key中,将小于66的值保存至大二个ke ...

  3. c语言中的结构体为值类型,当把一个结构体赋值给另一个结构体时,为值传递

    #include <stdio.h> int main() { struct person { int age; }; }; //值传递,将p1中所有成员变量的值赋值个p2中对应的成员变量 ...

  4. Find the largest K numbers from array (找出数组中最大的K个值)

    Recently i was doing some study on algorithms. A classic problem is to find the K largest(smallest) ...

  5. 【源代码】将一个整数的每位数分解并按逆序放入一个数组中(用递归算法)(C语言实现)

    帮朋友做的,好像是一个面试题.假设不过考察递归的话.应该是够了,程序的健壮性和通用性都非常一般的说-- #include <stdio.h> #include <stdlib.h&g ...

  6. SQL中如何将一个表中的某一列的数据复制到另一个表中的某一列里

    表一: SPRD PRD_NO      SPC 001                NULL 002               NULL 003               NULL ...   ...

  7. Oracle 函数 “申请通过后,将该表中循环遍历到的所有内容插到另一个表中”

    create or replace function mcode_apply_insert_material(p_mca_no VARCHAR2, p_action VARCHAR2, p_wf_no ...

  8. maven中如何将所有引用的jar包打包到一个jar中

    在pom文件的build节点中添加这个插件的引用: <plugins> <plugin> <artifactId>maven-assembly-plugin< ...

  9. 【Sql Server】使用触发器把一个表中满足条件的数据部分字段插入到另一个表中

    create trigger 触发器名称 on 对哪个表起作用 after insert,update as return set nocount on begin transaction; inse ...

随机推荐

  1. sql server 是否存在内存表?

    最近开发有个需求,需要使用到函数,但是函数中需要使用case when 判断分支,其实可以放到一张表中读取分支:但是物理表需要I/O开销,几十W的数据,线上开销也是很大的,所以就想sql server ...

  2. Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门

    说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...

  3. HDOJ/HDU 1251 统计难题(字典树啥的~Map水过)

    Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己 ...

  4. uva 10047 the monocyle (四维bfs)

    算法指南白书 维护一个四维数组,走一步更新一步 #include<cstdio> #include<cstring> #include<queue> #includ ...

  5. 容联云通讯_提供网络通话、视频通话、视频会议、云呼叫中心、IM等融合通讯能力开放平台。

    容联云通讯_提供网络通话.视频通话.视频会议.云呼叫中心.IM等融合通讯能力开放平台. undefined

  6. Day 4 @ RSA Conference Asia Pacific & Japan 2016

    09.00 – 09.45 hrs Advanced Malware and the Cloud: The New Concept of 'Attack Fan-out' Krishna Naraya ...

  7. 【iOS-Android开发对照】 之 APP入口

    [iOS-Android开发对照]之 APP入口 [图片 Android vs iOS] 提纲 对照分析iOS,Android的入口, iOS,Android的界面单元 为什么要有那样的生命周期 继承 ...

  8. LabVIEW设计模式系列——移位寄存器

    标准:1.太多移位寄存器会导致连线太多,看起来凌乱,使用簇将变量打包,统一用一个移位寄存器,这样可以减少连线的麻烦2.如果每个变量都使用一个移位寄存器,没有一个名字是很难区分移位寄存器到底属于哪一个变 ...

  9. android使用属性动画代替补间动画

    本文参考Android属性动画完全解析(上),初识属性动画的基本用法 android3.0之前一共有两种动画,分别是frame动画和tween动画,关于这两种动画如果不了解可以查看我之前的文章andr ...

  10. MFC/VC++ UI界面美化技术

    1.     工具: 1.1设备环境类: Windows下的绘图操作说到底就是DC操作.DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它. ...