顺序表的全排列,幂集合,有序表的折半查找
来源:互联网 发布:带手机版 cms建站系统 编辑:程序博客网 时间:2024/05/23 14:24
int SearchHalf(SqList L,ElemType x){//折半查找,递增有序,如果找不到,则元素在high-low之间,high<low,需要插入时应放在low位置 int low=0,high=L.length-1,mid; while(low<=high){ mid=(low+high)/2; if(x==L.elem[mid]) break; else if(x<L.elem[mid]) high=mid-1; else low=mid+1; } cout<<"low="<<low<<", high="<<high<<",mid="<<mid<<endl; if(low>high) return -1; return mid;//返回找到的位置}void GetPowerSet(int i,SqList L,SqList &tmp){ //输出集合L的幂集合如1,2,3的幂集合有8个,任意一个元素取或者不取 if(i>L.length-1) OutputList(tmp); else{ ElemType x=L.elem[i];int k=tmp.length; ListInsert(&tmp,x,k+1);GetPowerSet(i+1,L,tmp); //选择索引为i的元素 ListDelete(&tmp,&x,k+1);GetPowerSet(i+1,L,tmp); //舍去索引为i的元素 }}void Perm(SqList L,int k,int m){ //输出L的全排列 if(k==m) OutputList(L); else for(int i=k;i<=m;i++){ swap(L.elem[i],L.elem[k]); Perm(L,k+1,m); swap(L.elem[i],L.elem[k]); }}