双向冒泡
void BubbleSort_D(int[] a){
int low=0;
int high=a.length();
bool flag=true;
while(low<high && flag){
flag=false;
for(i=low;i<high;i++){
if(a[i]>a[i+1]){
swap(a[i],a[i+1]);
flag=true;
}
}
high--;
for(i=high;i>low;i--){
if(a[i]<a[i-1]){
swap(a[i],a[i-1]);
flag=true;
}
}
low++;
}
}
线性表顺序存储,每个元素都不相同,设计把所有奇数移动到所有偶数前边的算法
void move(int[] a){
int i=0;
int j=a.length();
while(i<j){
while(i<j && a[i]%2!=0) i++;
while(i<j && a[j]%2!=1) j--;
if(i<j){
swap(a[i],a[j]);
i++;
j--;
}
}
}
编写一个算法使之能在数组中找出第k小的元素
int kth_elem(int[] a,int low,int high,int k){
int p=a[low];
int low_temp=low;
int low_high=high;
while(low<high){
while(low<high && a[high]>=p)
high--;
a[low]=a[high];
while(low<high && a[low]<=p)
low++
}
a[low]=p;
if(low==k) return a[low];
else if(low>k) return kth_elem(a,low_temp,low-1,k);
else return kth_elem(a,low+1,high_temp,k-low);
}
int setPartition(int[] a){
int p,i;
int low=0,low_temp=0;
int high=n-1,high_temp=n-1;
bool flag=true;
int k=n/2;
int sum_pre=0,int sum_post=0;
while(flag){
p=a[low];
while(low<high){
while(low<high && a[high]>=p) --high;
if(low!=high) a[low]=a[high];
while(low<high && a[low]<=p) ++low;
if(low!=high) a[high]=a[low];
}
a[low]=p;
if(low==k-1) flag=0;
else{
if(low<k-1){
low_temp=++low;
high=high_temp;
}
else{
high_temp=--high;
low=low_temp;
}
}
}
for(i=0;i<k;i++) sum_pre+=a[i];
for(i=k;i<n;i++) sum_post+=a[i];
return sum_post - sum_pre;
}