关噪、崩瓤、俊戳、
-(NSArray *)sortFast:(NSMutableArray *)array left:(int)left right:(int)right
{
if(left >= right)//如果左邊索引大于或者等于右邊的索引就代表已經(jīng)整理完成一個(gè)組了
{
return array;
}
int i = left;
int j = right;
id key = array[left];
while(i < j) /*控制在當(dāng)組內(nèi)尋找一遍*/
{
while(i < j && key <= array[j])
/*而尋找結(jié)束的條件就是陆蟆,1寇窑,找到一個(gè)小于或者大于key的數(shù)(大于或小于取決于你想升
序還是降序)2,沒(méi)有符合條件1的慕的,并且i與j的大小沒(méi)有反轉(zhuǎn)*/
{
j--;/*向前尋找*/
}
array[i] = array[j];
/*找到一個(gè)這樣的數(shù)后就把它賦給前面的被拿走的i的值(如果第一次循環(huán)且key是
a[left]阎肝,那么就是給key)*/
while(i < j && key >= array[i])
/*這是i在當(dāng)組內(nèi)向前尋找,同上肮街,不過(guò)注意與key的大小關(guān)系停止循環(huán)和上面相反风题,
因?yàn)榕判蛩枷胧前褦?shù)往兩邊扔,所以左右兩邊的數(shù)大小與key的關(guān)系相反*/
{
i++;
}
array[j] = array[i];
}
array[i] = key;/*當(dāng)在當(dāng)組內(nèi)找完一遍以后就把中間數(shù)key回歸*/
[self sortFast:array left:left right:i - 1];/*最后用同樣的方式對(duì)分出來(lái)的左邊 的小組進(jìn)行同上的做法*/
[self sortFast:array left:i+1 right:right];/*用同樣的方式對(duì)分出來(lái)的右邊的小 組進(jìn)行同上的做法*/
/*當(dāng)然最后可能會(huì)出現(xiàn)很多分左右嫉父,直到每一組的i = j 為止*/
return array;
}
沛硅、、绕辖、