题目
5、算法题2
数组al[0,mid-1] 和 al[mid,num-1],都分别有序。将其merge成有序数组al[0,num-1],要求空间复杂度O(1)
我的实现:
将从前半段移除的值,用插入排序插入到后半段数组中,保持有序,这样将前半部分排序完,就这个数组有序了
可以运行的程序地址和word文档:http://download.csdn.net/detail/cq20110310/5196158
希望共同讨论,会不断的发笔试和面试的题目及答案,希望大家支持
- void test_merge(int a[],int num,int mid)
- {
- int i=0;
- int j=mid;
- int temp;
- while (i<mid)
- {
- if (a[i]<=a[mid])
- {
- i++;
- }
- else
- {
- temp=a[i];
- a[i]=a[mid];
- //将从前半段移除的值,用插入排序插入到后半段数组中,保持有序,这样将前半部分排序完,就这个数组有序了
- for (j=mid+1;j<num;j++)
- {
- if (temp <=a[j] )
- {
- a[j-1]=temp;
- break;
- }
- else
- {
- a[j-1]=a[j];
- }
- if (j==num-1)
- {
- a[j]=temp;
- break;
- }
- }
- i++;
- }
- }
- }