為方便處理
void QkSort(rectype r[]
// r為含有n個元素的線性表
//本算法對其排序
{int i=
while (k!=j)
{while (r[k]
if (r[k]
if (i>=j){temp=r[k];r[k]=r[i];r[i]=temp; i++;}
//左側只有紅色礫石
else {temp=r[j];r[j]=r[i];r[i]=temp; j++;
//左側已有紅色和白色礫石
temp=r[k];r[k]=r[i];r[i]=temp; i++;
//白色礫石(i所指)和待定礫石(j所指)
} //再交換r[k]和r[i]
if (r[k]
if (i<=j) { temp=r[k];r[k]=r[j];r[j]=temp; j++;}
// 左側已有白色礫石
else { temp=r[k];r[k]=r[i];r[i]=temp; j=i+
//i
}//while
if (r[k]==
else if (r[k]==
//最後紅
}//結束QkSor算法
[算法討論]若將j(上面指向白色)看作工作指針
算法片段如下
int i=
while(j<=k)
if (r[j]==
{temp=r[i]; r[i]=r[j]; r[j]=temp; i++;j++; }
else if (r[j]==
else //(r[j]==
{temp=r[j]; r[j]=r[k]; r[k]=temp; k
對比兩種算法
[
From:http://tw.wingwit.com/Article/program/sjjg/201311/23170.html