iOS 快速排序

??快速排序(Quick Sort)是實(shí)際開發(fā)中經(jīng)常選用的一種排序方式。其排序原理:取數(shù)組中的首個(gè)元素為軸點(diǎn)數(shù)據(jù),小于軸點(diǎn)的放在軸點(diǎn)前邊大于的放在軸點(diǎn)后邊,分成的左右子數(shù)組重復(fù)此操作的過(guò)程。

// 返回軸點(diǎn)下標(biāo)
- (NSInteger)sortArrayWithBegain:(NSInteger)begain end:(NSInteger)end
{
    end--;
    // 此處為了規(guī)避左右子數(shù)組不平衡的情況,將固定取數(shù)組第一個(gè)元素改為隨機(jī)取數(shù)組中的某個(gè)值為軸點(diǎn)元素,一定程度規(guī)避了最差時(shí)間復(fù)雜度的出現(xiàn)
    NSInteger randomIndex = begain + arc4random() % (end - begain);
    id pivot = self.sortArray[randomIndex];
    self.sortArray[randomIndex] = self.sortArray[begain];
    self.sortArray[begain] = pivot;
    
    while (begain < end) {
        while (begain < end) {
            if ([self compareObjcet:pivot anotherObject:self.sortArray[end]]) {
                end--;
            } else {
                self.sortArray[begain++] = self.sortArray[end];
                break;
            }
        }
        while (begain < end) {
            if ([self compareObjcet:self.sortArray[begain] anotherObject:pivot]) {
                begain++;
            } else {
                self.sortArray[end--] = self.sortArray[begain];
                break;
            }
        }
    }
    self.sortArray[begain] = pivot;
    return begain;
}

根據(jù)軸點(diǎn)將數(shù)組分成左右兩個(gè)子數(shù)組

- (void)sortArrayBegain:(NSInteger)begain end:(NSInteger)end
{
    if (end - begain < 2) {
        return;
    }
    NSInteger mid = [self sortArrayWithBegain:begain end:end];
    [self sortArrayBegain:0 end:mid];
    [self sortArrayBegain:mid + 1 end:end];
}

給出最初的排序數(shù)組

- (void)sort
{
    [self sortArrayBegain:0 end:self.sortArray.count];
}

總結(jié):很顯然這個(gè)排序算法也是遞歸調(diào)用的過(guò)程,其通式依然是T(n) = 2 * T(n/2) + O(n),因此時(shí)間復(fù)雜度為O(n*logn)級(jí)別。具體參看iOS 歸并排序最后部分--遞歸式及復(fù)雜度

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容