冒泡排序

冒泡排序的核心思路

  • 整個冒泡排序過程中包含多次冒泡操作。每一次冒泡操作都會遍歷整個數(shù)組,依次對數(shù)組中相鄰的元素進行比較,看是否滿足大小關(guān)系要求,如果不滿足,就將它們互換位置。一次冒泡操作會讓至少一個元素移動到它應(yīng)該在的位置,重復(fù)n次,就完成了n個數(shù)據(jù)的排序工作。

冒泡排序的操作流程。

  • 假設(shè)要對一個數(shù)組a[6]從小到大順序進行排序。第一步操作,先比較a[0]和a[1]的大小,如果a[0]>a[1],則將a[0]和a[1]交換位置,如果a[0]<a[1],則不交換位置。完成這一步操作后,再對a[1]和a[2]進行比較,操作原則同上。一直比較到最后,則a[5]就是這個數(shù)組中的最大值,已經(jīng)在數(shù)組的末尾了。
  • 第二步操作再次進行a[0]和a[1]的比較,一直比較到a[4],就把數(shù)組的第二大的元素放在了a[4]的位置了。
  • 按照這樣的原則,依次重復(fù)操作,比較到只剩a[0]的時候,就排好序了。

冒泡排序的相關(guān)

  • 冒泡排序是原地排序算法,是穩(wěn)定排序算法。
  • 冒泡排序的平均時間復(fù)雜度為O(n2)
  • 我們可以利用一個BOOL值去記錄某次冒泡操作是否進行了數(shù)據(jù)的交換,如果沒有進行數(shù)據(jù)操作,則說明數(shù)組以達到完全有序的狀態(tài),不需要繼續(xù)執(zhí)行后續(xù)冒泡操作了,直接結(jié)束排序就可以了。

簡單的代碼實現(xiàn)

- (void)bubbleSort
{
    
    NSMutableArray *numberArray = [NSMutableArray arrayWithArray:@[@5,@1,@6,@2,@4,@3]];
    
    NSLog(@"排序之前的結(jié)果:%@",numberArray);
    
    for (int i = 0; i<numberArray.count; i++) {
        
        BOOL isNeedBreak = YES;
        
        for (int j = 0; j<(numberArray.count-i-1); j++) {
            if ([numberArray[j] intValue] > [numberArray[j+1] intValue]) {
                NSNumber *numberTmp = numberArray[j];
                numberArray[j] = numberArray[j+1];
                numberArray[j+1] = numberTmp;
                isNeedBreak = NO;
            }
        }
        
        if (isNeedBreak == YES) {
            break;
        }
    }
    
    NSLog(@"排序之后的結(jié)果:%@",numberArray);
}

c

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

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

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