顺序表的划分问题
1.以顺序表第一个元素为枢轴划分,左边的都小于枢轴,右边的都大于等于枢轴
void partition(int a[],int n){ int temp=a[0]; int i=0; int j=n-1; while(i<j){ while(i<j && a[j]>temp){ j--; } if(i<j){ a[i]=a[j]; i++; } while(i<j &&a[i]<=temp){ i++; } if(i<j){ a[j]=a[i]; j--; } } a[i]=temp; }
2.以任意数值为枢轴
void partition(int a[],int n,int com){ int temp=a[0]; int i=0; int j=n-1; while(i<j){ while(i<j && a[j]>com){ j--; } if(i<j){ a[i]=a[j]; i++; } while(i<j &&a[i]<=com){ i++; } if(i<j){ a[j]=a[i]; j--; } } a[i]=temp; }
3.以顺序表中任意值为枢轴
void partition(int a[],int n,int k){ int temp=a[0]; a[0]=a[k]; a[k]=temp; int i=0; int j=n-1; temp=a[i]; while(i<j){ while(i<j && a[j]>temp){ j--; } if(i<j){ a[i]=a[j]; i++; } while(i<j &&a[i]<=temp){ i++; } if(i<j){ a[j]=a[i]; j--; } } a[i]=temp; }