歸并排序

//  ViewController.swift
//  MergeSort
//
//  Created by DworldAI on 2021/11/5.
//

import UIKit

class ViewController: UIViewController {

    var leftArr = [Int]()
    override func viewDidLoad() {
        super.viewDidLoad()

        var arr = [2,5,2,3,9,6,2,100,33,3,45,2,3,9,6,2,100,33,3,45,2,3,9,6,2,100,33,3,45,2,3,9,6,2,100,33,3,4]

        let startTime = CFAbsoluteTimeGetCurrent()
        self.sort(arr: &arr, start: 0, end: arr.count)
                
        let endTime = CFAbsoluteTimeGetCurrent()
        print("代碼執(zhí)行時(shí)長(zhǎng):%f 毫秒", (endTime - startTime)*1000)
        
    }
    
    func sort(arr:inout [Int],start:Int,end:Int){
        if end - start < 2{
            return
        }
        let mid = (end + start)/2
        sort(arr: &arr, start: start, end: mid)
        sort(arr: &arr, start: mid, end: end)
        self.mergee(arr: &arr, begin: start, mid: mid, end: end)
    }
    
    func mergee( arr:inout [Int],begin:Int,mid:Int,end:Int) {
        
        var li = 0
        let le = mid - begin
        var ri = mid
        let re = end
        var ai = begin

        leftArr = [Int]()
        for dex in 0 ..< le {
            leftArr.append(arr[begin + dex])
        }
        while li < le {
            if ri < re,leftArr[li] > arr[ri] {
                arr[ai] = arr[ri]
                ai = ai + 1
                ri = ri + 1
            }else{
                arr[ai] = leftArr[li]
                 ai = ai + 1
                 li = li + 1
            }
        }

    }
    

    //排序入口
    func mergeSort(arr:inout [Int]) {
        if arr.count <= 1 {
            return
        }
        process(arr: &arr, left: 0, right: arr.count - 1)
    }
    //該方法主要用作二分
    func process(arr:inout [Int],left:Int,right:Int) {
        if left == right {
            return
        }
        let middle = left + (right - left) >> 1
        process(arr: &arr, left: left, right: middle)
        process(arr: &arr, left: middle + 1, right: right)
        merge(arr: &arr, left: left, middle: middle, right: right)
    }
    //將二分后的數(shù)組進(jìn)行合并
    func merge(arr:inout [Int],left:Int,middle:Int,right:Int){
        var help:[Int] = [Int]()

        var leftLocation:Int = left
        var rightLocation:Int = middle + 1

        while (leftLocation <= middle && rightLocation <= right) {
            if arr[leftLocation] <= arr[rightLocation] {
                help.append(arr[leftLocation])
                leftLocation += 1
            }else{
                help.append(arr[rightLocation])
                rightLocation += 1
            }
        }

        while leftLocation <= middle {
            help.append(arr[leftLocation])
            leftLocation += 1
        }
        while rightLocation <= right {
            help.append(arr[rightLocation])
            rightLocation += 1
        }
        var index = left
        for item in help {
            arr[index] = item
            index += 1
        }

    }

}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末各聘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抡医,更是在濱河造成了極大的恐慌躲因,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忌傻,死亡現(xiàn)場(chǎng)離奇詭異大脉,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)水孩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門镰矿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人俘种,你說(shuō)我怎么就攤上這事秤标。” “怎么了宙刘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵苍姜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我悬包,道長(zhǎng)衙猪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任布近,我火速辦了婚禮垫释,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撑瞧。我一直安慰自己棵譬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布预伺。 她就那樣靜靜地躺著茫船,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扭屁。 梳的紋絲不亂的頭發(fā)上算谈,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音料滥,去河邊找鬼然眼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛葵腹,可吹牛的內(nèi)容都是我干的高每。 我是一名探鬼主播屿岂,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鲸匿!你這毒婦竟也來(lái)了爷怀?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤带欢,失蹤者是張志新(化名)和其女友劉穎运授,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體乔煞,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吁朦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渡贾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逗宜。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖空骚,靈堂內(nèi)的尸體忽然破棺而出纺讲,到底是詐尸還是另有隱情,我是刑警寧澤囤屹,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布刻诊,位于F島的核電站,受9級(jí)特大地震影響牺丙,放射性物質(zhì)發(fā)生泄漏则涯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一冲簿、第九天 我趴在偏房一處隱蔽的房頂上張望粟判。 院中可真熱鬧,春花似錦峦剔、人聲如沸档礁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呻澜。三九已至,卻和暖如春惨险,著一層夾襖步出監(jiān)牢的瞬間羹幸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工辫愉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栅受,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像屏镊,于是被迫代替她去往敵國(guó)和親依疼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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

  • 百度: 歸并排序(MERGE-SORT)是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法(Divide...
    趁年輕多奮斗閱讀 224評(píng)論 0 0
  • 一而芥、概述 歸并排序是建立在歸并操作上的一種有效的排序算法律罢,該算法是采用分治法(Divide and Conquer...
    夏與清風(fēng)閱讀 1,066評(píng)論 0 1
  • 什么是歸并排序呢,歸并排序就是先分再合棍丐,所謂先分再合就是先分到不能再分误辑,也就是每組一個(gè)元素,再原來(lái)的兩組合并成一組...
    一個(gè)人的飄閱讀 200評(píng)論 0 0
  • 一. 概念 歸并的含義是將兩個(gè)或兩個(gè)以上的有序表合并成一個(gè)新的有序表。大體分成盒蟆,兩路歸并排序踏烙,和多路歸并排序。用于...
    丶阿顏閱讀 3,315評(píng)論 0 11
  • 歸并排序可以說(shuō)是分治法的一個(gè)很形象的實(shí)例 歸并排序與快排不同的是历等,歸并排序重點(diǎn)在整合讨惩,簡(jiǎn)單的說(shuō)把相對(duì)分區(qū)有序而內(nèi)部...
    掌灬紋閱讀 379評(píng)論 0 0