iOS 冒泡排序挣柬、二分法查找潮酒、快排、哈希排序

// 冒泡排序
- (void)bubbleSort {
    NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"98",@"75",@"89",@"53",@"67",@"92"]];
    for (int i = 0; i < array.count - 1; i++) {
        for (int j = 0; j < array.count-1-i; j++) {
            //原理:從第1個(gè)數(shù)開始起邪蛔,與后面的數(shù)字相互比較急黎,滿足條件的向后位移(值交換),若不滿足條件侧到,拿到大一點(diǎn)的數(shù)值繼續(xù)向后比較
            if ([array[j] intValue] > [array[j+1] intValue]) {
                // 開始交換數(shù)據(jù)
                NSString *temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
        NSLog(@"%@",array);
    }
}

// 選擇排序
- (void)selectSort {
    NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"98",@"75",@"89",@"53",@"67",@"92"]];
    for (int i = 0; i < array.count-1; i++) {
        // 原理:從i后面第i+1個(gè)數(shù)起勃教,跟array[i]相互比較,滿足條件即交換值
        for (int j = i+1; j < array.count; j++) {
            // if里面的 '>' '<' 條件決定了排序的 升降
            if ([array[i] intValue] > [array[j] intValue]) {
                NSString *temp = array[j];
                array[j] = array[i];
                array[i] = temp;
            }
        }
        NSLog(@"%@",array);
    }
}

// 二分法查找
- (void)binarySearch {
    // OC方法實(shí)現(xiàn)二分法:indexOfObject:inSortedRange:options:usingComparator:
    /*
    NSArray *sortedArray = ... // must be sorted
    id searchObject = ...
    NSRange searchRange = NSMakeRange(0, [sortedArray count]);
    NSUInteger findIndex = [sortedArray indexOfObject:searchObject
                                    inSortedRange:searchRange
                                          options:NSBinarySearchingFirstEqual
                                  usingComparator:^(id obj1, id obj2)
                        {
                            return [obj1 compare:obj2];
                        }];

    */


    NSArray *numberArray = @[@1, @3, @27, @36, @42, @70, @82];

    NSNumber *searchNum = @70;

    NSUInteger mid;
    NSUInteger min = 0;
    NSUInteger max = [numberArray count] - 1;

    BOOL found = NO;

    while (min <= max) {
    
          mid = (min + max)/2;
    
          if ([searchNum intValue] == [numberArray[mid] intValue]) {
            NSLog(@"We found the number! It is at index %lu", mid);
            found = YES;
            break;
        } else if ([searchNum intValue] < [numberArray[mid] intValue]) {
            max = mid - 1;
        } else if ([searchNum intValue] > [numberArray[mid] intValue]) {
            min = mid + 1;
        }
    }
    if (!found) {
        NSLog(@"The number was not found.");
    }
}

 // 快排和希爾排序
 //  Created by 葛朋 on 2018/5/26.
- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:@(6), @(1),@(2),@(5),@(9),@(4),@(3),@(7),@(100),@(80),@(88),@(30),@(35),@(20),@(14),@(34),@(88),@(83),nil];

    NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];

    NSTimeInterval a=[dat timeIntervalSince1970];

    //  [self quickSortArray:arr withLeftIndex:0 andRightIndex:arr.count - 1];
      [self xierAry:arr];
    NSDate* dat2 = [NSDate dateWithTimeIntervalSinceNow:0];

    NSTimeInterval a2 =[dat2 timeIntervalSince1970];
    NSLog(@"%@--時(shí)間:%f",arr,(a2 - a));

}


- (void)xierAry:(NSMutableArray *)ary{

    NSInteger n = ary.count;

    for (NSInteger gap = n/2 ; gap > 0; gap /= 2) {
        for (NSInteger i = gap; i < n; i++) {
            for (NSInteger j = i - gap; j>= 0 && ary[j] > ary[j+ gap]; j-= gap) {
                [ary exchangeObjectAtIndex:j withObjectAtIndex:(j+gap)];
            }
        }
    }

}

- (void)quickSortArray:(NSMutableArray *)array withLeftIndex:(NSInteger)leftIndex andRightIndex:(NSInteger)rightIndex
{
    if (leftIndex >= rightIndex) {//如果數(shù)組長(zhǎng)度為0或1時(shí)返回
        return ;
    }

    NSInteger i = leftIndex;
    NSInteger j = rightIndex;
    //記錄比較基準(zhǔn)數(shù)
    NSInteger key = [array[i] integerValue];

    while (i < j) {
        /**** 首先從右邊j開始查找比基準(zhǔn)數(shù)小的值 ***/
        while (i < j && [array[j] integerValue] >= key) {//如果比基準(zhǔn)數(shù)大匠抗,繼續(xù)查找
            j--;
        }
        //如果比基準(zhǔn)數(shù)小故源,則將查找到的小值調(diào)換到i的位置
        array[i] = array[j];
    
        /**** 當(dāng)在右邊查找到一個(gè)比基準(zhǔn)數(shù)小的值時(shí),就從i開始往后找比基準(zhǔn)數(shù)大的值 ***/
        while (i < j && [array[i] integerValue] <= key) {//如果比基準(zhǔn)數(shù)小汞贸,繼續(xù)查找
             i++;
        
         }
        //如果比基準(zhǔn)數(shù)大绳军,則將查找到的大值調(diào)換到j(luò)的位置
        array[j] = array[i];
    
    }

    //將基準(zhǔn)數(shù)放到正確位置
    array[i] = @(key);

    /**** 遞歸排序 ***/
    //排序基準(zhǔn)數(shù)左邊的
    [self quickSortArray:array withLeftIndex:leftIndex andRightIndex:i - 1];
    //排序基準(zhǔn)數(shù)右邊的
    [self quickSortArray:array withLeftIndex:i + 1 andRightIndex:rightIndex];
 }

特別感謝 葛朋 快排、希爾排序
Created by 葛朋 on 2018/5/26.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末矢腻,一起剝皮案震驚了整個(gè)濱河市门驾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踏堡,老刑警劉巖猎唁,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異顷蟆,居然都是意外死亡诫隅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門帐偎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逐纬,“玉大人,你說我怎么就攤上這事削樊』砩” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵漫贞,是天一觀的道長(zhǎng)甸箱。 經(jīng)常有香客問我,道長(zhǎng)迅脐,這世上最難降的妖魔是什么芍殖? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮谴蔑,結(jié)果婚禮上豌骏,老公的妹妹穿的比我還像新娘龟梦。我一直安慰自己,他們只是感情好窃躲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布计贰。 她就那樣靜靜地躺著樊拓,像睡著了一般冯凹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上只锻,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天刘绣,我揣著相機(jī)與錄音樱溉,去河邊找鬼。 笑死纬凤,一個(gè)胖子當(dāng)著我的面吹牛福贞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播停士,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挖帘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了恋技?” 一聲冷哼從身側(cè)響起拇舀,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜻底,沒想到半個(gè)月后骄崩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薄辅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年要拂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片站楚。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脱惰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窿春,到底是詐尸還是另有隱情拉一,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布旧乞,位于F島的核電站蔚润,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏尺栖。R本人自食惡果不足惜抽碌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望决瞳。 院中可真熱鬧货徙,春花似錦、人聲如沸皮胡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)屡贺。三九已至蠢棱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甩栈,已是汗流浹背泻仙。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留量没,地道東北人玉转。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像殴蹄,于是被迫代替她去往敵國(guó)和親究抓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容