顺序表的全排列,幂集合,有序表的折半查找

来源:互联网 发布:带手机版 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]);  }}

原创粉丝点击