OC方式實現冒泡與選擇排序

最近重新翻看冒泡與選擇排序,寫下來與大家分享!

冒泡排序:效率較低。

- (void)sortArrayByMaopao:(NSMutableArray *)array{

    /*

        冒泡排序原理:

        1 第一層for循環遍歷趟數,需進行array.count-1趟排序。

        2 第二層for循環對每趟數據的相鄰兩個進行處理。只需對每趟前array.count-1-i數據做處理,每趟後面的數據已經處理。

        效率:如果n個元素進行比較,需要進行n-1趟;第i趟需要比較n-i次,交換n-i次。

     */

    for(int i=0;i<array.count-1;i++){

        for(int j=0;j<array.count-1-i;j++){

            if(([array[j] compare:array[j+1]]) == NSOrderedDescending){

                [array exchangeObjectAtIndex:j withObjectAtIndex:j+1];

            }

        }

        NSLog(@"sortingArray%d is %@",i,array);

    }

    NSLog(@"sortedArray is %@",array);

    

//    /*

//        原理同上。

//        c語言交換方式

//     */

//    for(int i=0;i<array.count-1;i++){

//        for(int j=0;j<array.count-1-i;j++){

//            if(([array[j] compare:array[j+1]]) == NSOrderedDescending){

//                id temp = array[j];

//                array[j] = array[j+1];

//                array[j+1] = temp;

//            }

//        }

//        NSLog(@"sortingArray%d is %@",i,array);

//    }

//    NSLog(@"sortedArray is %@",array);

}



選擇排序:效率比冒泡排序高,主要體現在每趟只需進行一次交換。

- (void)sortArrayByXuanze:(NSMutableArray *)array{

    

    /*

        選擇排序原理:

        1 for 循環遍歷趟數,每趟只取剩餘最小值進行交換。

          建一個全局的位置變量p,獲取需要交換的元素位置。

        2 for 循環遍歷剩餘元素,獲取最小值的位置p

        效率:如果n個元素進行比較,需要進行n-1趟;第i趟需要比較n-i次,交換n-i次。

     */

    int p=0;

    for(int i=0;i<array.count-1;i++){

        p=i;

        for(int j=i+1;j<array.count;j++){

            if(([array[j] compare:array[p]]) == NSOrderedAscending){

                p=j;

            }

        }

        if(p!=i){

            [array exchangeObjectAtIndex:p withObjectAtIndex:i];

        }

        NSLog(@"sortingArray%d is %@",i,array);

    }

    NSLog(@"sortedArray is %@",array);

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章