*16.写一个双向冒泡排序的算法,即在排序过程中交替改变扫描方向。 解:
算法如下:
void BubbleSort(SeqList R)
{//R[1..n]是待排序文件,双向扫描冒泡排序 int i,j,k;
Boolean exchange; //交换标记 i=n;j=1; exchange=TRUE; while (i>j)&&(exchange) {k=i-1;exchange=FALSE; while (k>=j)//由下往上扫描 {if (r[k]>r[k+1])
{r[0]=r[k];r[k]=r[k+1];r[k+1]=r[k];exchange=TRUE;//交换 }//endif k--; }//endwhile if (exchange) {exchange=FALSE; j++;k=j+1;
while(k<=i)//由上往下扫描 {if (r[k] {r[0]=r[k];r[k]=r[k-1];r[k-1]=r[k];exchange=TRUE;//交换 }//endif k++; }endwhile i--; }//endif }endwhile }//endsort 17.下面是一个自上往下扫描的冒泡排序的伪代码算法,它采用lastExchange 来记录每趟扫描中进行交换的最后一个元素的位置,并以它作为下一趟排序循环终止的控制值。请仿照它写一个自下往上扫描的冒泡排序算法。 void BubbleSort(int A[],int n) //不妨设A[0..n-1]是整型向量 int lastExchange,j,i=n-1; while (i>0) lastExchange=0; for(j=0;j i=lastExchange;//将i置为最后交换的位置 }//endwhile }//BubbleSort 解:算法如下: void BubbleSort(int A[],int n) //不妨设A[0..n-1]是整型向量 int lastExchange,j,i=0;
相关推荐: