已知一个一维数组A[m+n]中依次存放的两个线性表(a1,a2,a3,...,am)和(b1,b2,b3,...,bn)。试编写一个函数,将数组中的两个顺序表的位置互换,即将b1,b2,b3,...,bn)放在(a1,a2,a3,...,am)前面
思想:首先将表中元素全部逆序,变为(bn,..,b2,b1,am,...,a2,a1),再将前n个元素逆序(b1,b2,..,bn,am,...,a2,a1),再将后m个元素逆序(b1,b2,..,bn,a1,a2,...,am)
//逆转数组中元素 void Reverse(int a[],int left,int right,int arraysize){ if(left>=right || right>=arraysize)return; int mid = (left+right)/2; for(int i=0;i<mid-left;i++){ int temp = a[left+i]; a[left+i] = a[right-i]; a[right-i] = temp; } } //将表中元素逆序 void Exchange(int a[],int m,int n,int arraysize){ Reverse(a,0,m+n-1,arraysize); Reverse(a,0,n-1,arraysize); Reverse(a,n,m+n-1,arraysize); }
原文:https://www.cnblogs.com/qing-mo/p/10950043.html