面试题:两个无序数组合并成一个有序数组
来源:互联网 发布:淘宝购物流程步骤图 编辑:程序博客网 时间:2024/05/22 18:23
昨天面试,问了一个简单的算法题,当时快速排序的代码有点忘了,还想了一会儿。最后写的估计也还有点问题,再写一遍。
思路:先分别对两个数组进行排序(可以用快速排序),然后两路归并。
#include <iostream>using namespace std;class Solution {public:int *sort(int *a,int lenA,int *b,int lenB){fastSort(a,0,lenA);fastSort(b,0,lenB);return merge(a,lenA,b,lenB);}private://快速排序void fastSort(int *a,int start,int end){if(a==NULL || end-start<=1 || start<0)return;int pivotPos = start;int pivot = a[start];int temp;for(int i=start+1;i<end;++i){if(a[i]<pivot){if(++pivotPos!=i){temp = a[i];a[i] = a[pivotPos];a[pivotPos] = temp;}}}a[start] = a[pivotPos];a[pivotPos] = pivot;fastSort(a,start,pivotPos-1);fastSort(a,pivotPos+1,end);}//两路归并int *merge(int *a,int lenA,int *b,int lenB){if(a==NULL || lenA<=0)return b;if(b==NULL || lenB<=0)return a;int *arry = new int[lenA+lenB];if(arry==NULL){cerr << "内存分配失败" << endl;exit(1);}int posA = 0, posB = 0 ,pos = 0;while(posA<lenA && posB<lenB){if(a[posA]<b[posB])arry[pos++] = a[posA++];elsearry[pos++] = b[posB++];}while(posA<lenA)arry[pos++] = a[posA++];while(posB<lenB)arry[pos++] = b[posB++];return arry;}};void main(){int len = 5;int *a = new int[len];int *b = new int[len];for(int i=0;i<len;++i){a[i] = rand();b[i] = rand();}for(int i=0;i<len;++i)cout << a[i] << " ";cout << endl;for(int i=0;i<len;++i)cout << b[i] << " ";cout << "\n排序后:" << endl;int *arry = Solution().sort(a,len,b,len);for(int i=0;i<2*len;++i)cout << arry[i] << " ";cout << endl;}
假设两个数组长度相等,均为N,则算法的时间复杂度是O(2NlogN)。
0 0
- 面试题:两个无序数组合并成一个有序数组
- 面试题:数组元素统计、合并两个有序数组
- java将两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组,合并成一个有序数组!
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成有序数组
- 将两个无序数组合并为有序链表
- 将两个整型数组有序合并成一个数组
- 面试题--两有序数组合并
- 面试题3 有序数组合并
- 两个有序数组合并为一个有序数组
- 两个有序数组合并为一个有序数组
- 表单提交数组时判断是否有重复的提交
- AC自动机 + 二维最短路 HDU 4511小明系列故事――女友的考验
- 平衡二叉树(AVLTree)
- 前端部分开发工具-个人收藏
- MyEclipse 2015最新版下载
- 面试题:两个无序数组合并成一个有序数组
- linux软件包管理 rpm yum dpkg apt-get
- iMX6 IPU 之CM .
- shared_pointer
- OpenGL ES 2.0 编程三步曲
- 《跨界杂谈》企业商业模式(四):弹性
- android动态加载及插件化开发探讨
- python subprocess
- 附加属性案例