数组al[0,mid-1]和al[mid,num-1]是各自有序的,对数组al[0,num-1]的两个子有序段进行merge,得到al[0,num-1]整体有序。要求空间复杂度为O(1)。注:al[i]元素是支持'<'运算符的。
下面的代码不知道有没有符合空间复杂度O(1)的要求,如有错误,望指点。
#include "iostream.h" void sort(int a[],int mid,int lenght) { int temp,i,k; for(i=mid;i<=lenght;i++) { temp=a[i]; k=i-1; while(k>=0&&a[k]>temp) { a[k+1]=a[k]; k--; } a[k+1]=temp; } } int main(int argc, char* argv[]) { int a[11]={1,4,6,7,10,2,3,8,9,15,16}; sort(a,5,10); int i; for(i=0;i<11;i++) cout<<a[i]<<" "; return 0; }