類似本題的選了 個題其解答如下
()與上面第題不同的是這裡要求以an為參考元素將線性表分成左右兩部分左半部分的元素都小於等於an右半部分的元素都大於anan位於分界位置上其算法主要片段語句如下:
i=;j=n;
t=a[n];∥暫存參考元素
while(i<j)
{while(i<j && a[i]<=t) i++;∥當前元素不大於參考元素時指針i後移
if(i<j) a[j]=a[i];∥將大於參考元素的元素後移
while(i<j && a[j]>t) j;∥當前元素大於參考元素時指針前移
if(i<j) a[i++]=a[j];∥將小於參考元素的當前元素前移
}
a[i]=t;∥參考元素置於分界位置
() [題目分析]本題要求將線性表A分成B和C兩個表表B和表C不另占空間而是利用表A的空間其算法與第題相同這裡僅把表B和表C另設空間的算法解答如下
void Rearrange(int A[]B[]C[])∥線性表A有n個整型元素順序存儲本算法將A拆成B和C 兩個表B中存放大於等於零的元素C中存放小於零的元素
{i=;∥ijk是工作指針分別指向AB和C表的當前元素
j=k=;∥jk初始化為
while(i<n)
{if(A[i]<) C[++k]=A[i++];∥將小於零的元素放入C表
else B[++j]=A[i++];∥將大於零的元素放入B表
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/23344.html