两个排好序的数组重新排序为一个新数组
来源:互联网 发布:网络2d游戏排行榜2016 编辑:程序博客网 时间:2024/06/05 20:45
题目:已知两个数组list1和list2都为升序排列,例如{1, 3, 34, 100},{2, 23, 45, 67, 200,300}。先要求用一个新数组包含这两个数组,并且按升序排列,时间复杂度尽量低。
解法:用两个指针分别指向数组一和数组二的第一个元素,让两个元素进行比较,把较小元素放进新数组中,并使较小元素的数组的指针加1后移。在让两个数组的元素进行比较,直到其中一个数组遍历完毕,把另一个数组的剩下的元素直接放到新数组的后面即可。
c语言代码
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100typedef struct{int data[MAXSIZE];int length; }SqList;int main(){void sortElem(SqList List1, SqList List2, SqList *ResList);SqList List1, List2;List1.length = 5;for (int i = 0; i < List1.length; i++){scanf("%d", &List1.data[i]);}List2.length = 6;for (int j = 0; j < List2.length; j++){scanf("%d", &List2.data[j]);}SqList * ResList = (SqList *)malloc(sizeof(SqList));sortElem(List1, List2, ResList);for (int i = 0; i < ResList->length; i++){printf("%d\n", ResList->data[i]);}}void sortElem(SqList List1, SqList List2, SqList *ResList) {int i = 0, j = 0, k = 0;int len1 = List1.length;int len2 = List2.length;while (i < len1 && j < len2){if (List1.data[i] <= List2.data[j]){ResList->data[k] = List1.data[i];i++;}else{ResList->data[k] = List2.data[j];j++;}k++;}if (i == len1){while (j < len2){ResList->data[k] = List2.data[j];k++;j++;}} if (j == len2){while (i < len1){ResList->data[k] = List1.data[i];k++;i++;};}ResList->length = k;}
由以上代码可看出,时间复杂度为O(N)
0 0
- 两个排好序的数组重新排序为一个新数组
- 将两个已经排好序的数组重新排序存于一个更大的数组中
- 合并两个有序数组为一个新的有序数组
- 合并两个数组为一个数组,并且对新数组进行排序
- 如何合并两个数组为一个数组,并且排序。
- 将两个数组合并为一个数组并排序
- 两个int类型的数组合并为新的数组
- 合并两个已经排序的数组为另一个数组
- 两个有序数组归并为一个数组
- 将两个排好序的数组合并为一个排好序的数组
- 输入一个递增排序的数组和一个数字s,在数组中寻找两个数,使得这两个数的和为s
- 排序数组中和为给定值的两个数字
- 排序数组中和为给定值的两个数字
- 排序数组中和为给定值的两个数字
- 排序数组中和为给定值的两个数字
- 找出排序数组中和为给定值的两个数字
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数
- JAVA八个基本数据类型
- 数据库加密技术总结
- C/C++ 初学简单笔记 —2—
- loading黑马程序员之IOFile(2-4)
- 驱动第三天
- 两个排好序的数组重新排序为一个新数组
- Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- java.lang.OutOfMemoryError: PermGen space,Intellidea报内存溢出
- 修昔底德陷阱
- Java算法:根据输入的数字计算所有的回文数
- Nslookup命令的用法
- 初学免杀
- 大數乘法 【STL,字符串實現】
- Cache 功能、映射方法