国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - 深入解析快速排序算法的原理及其Go語言版實現

深入解析快速排序算法的原理及其Go語言版實現

2020-04-29 11:05Lonphy Golang

這篇文章主要介紹了快速排序算法的原理及其Go語言版實現,文中對于快速算法的過程和效率有較為詳細的說明,需要的朋友可以參考下

快速排序是一種基于分治技術的重要排序算法。不像歸并排序是按照元素在數組中的位置對它們進行劃分,快速排序按照元素的值對它們進行劃分。具體來說,它對給定數組中的元素進行重新排列,以得到一個快速排序的分區。在一個分區中,所有在s下標之前的元素都小于等于A[s],所有在s下標之后的元素都大于等于A[s]。

深入解析快速排序算法的原理及其Go語言版實現

顯然,建立了一個分區以后,A[s]已經位于它在有序數組中的最終位置,接下來我們可以繼續對A[s]前和A[s]后的子數組分別進行排序(使用同樣的方法)。
為了排序一個數組A的全部元素,初始調用的是QUICKSORT(A,1,A.length)。

下面的算法對A[p..r]進行分區(先偽代碼一下、領會意思)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PARTITION(A,p,r)
 
 x = A[r]
 
 i = p - 1
 
 for j = p to r - 1
 
  if A[j] ≤ x
 
   i = i + 1
 
   exchange A[i] with A[j]
 
 exchange A[i+1] with A[r]
 
 return i+1

快速排序算法的效率:

在最優情況下,鍵值比較的次數Cbest(n)滿足下面的遞推式:

當n>1時,Cbest(n)=2Cbest(n/2)+n,Cbest(1)=0

根據主定理,Cbest(n)∈Θ(nlogn);對于n=2k的情況求得Cbest(n) = nlog(n)。

在最差的情況下,所有的分裂點都趨于極端:兩個子數組有一個為空,而另一個子數組僅僅比被分區的數組少一個元素。具體來說,這種令人遺憾的情況會發生在升序的數組上,也就是說輸入的數組已經被排過序了。所以,在進行了n+1次比較之后建立了分區,并且將A[0]和它本身進行了交換以后,快速排序算法還會對嚴格遞增的數組A[1..n-1]進行排序。對規模減小了的嚴格遞增數組的排序會一直繼續到最后一個子數組A[n-2..n-1]。這種情況下,鍵值比較的總次數應該等于:

Cworst(n)=(n+1)+n+...+3=(n+1)(n+2)/2-3∈Θ(n2)

現在,輪到討論快速排序在平均情況下的效率了。對于大小為n的隨機排列的數組,快速排序的平均鍵值比較次數記為Cavg(n)。假設分區的分裂點s(0≤s≤n-1)位于每個位置的概率都是1/n,我們得到下面的遞推關系式:

深入解析快速排序算法的原理及其Go語言版實現

 

Cavg(0)=0,Cavg(1)=0

Cavg(n)≈2nlnn≈1.38nlogn
因此,快速排序在平均情況下,僅比最優情況多執行38%的比較操作。此外,它的最內層循環效率非常高,使得在處理隨機排列的數組時,速度要比歸并排序快。

以下是快速排序的Go代碼:

 

復制代碼 代碼如下:

 

func QuickSort(slice_arg []int, iLeft int, iRight int) {
    if iLeft < iRight {
        var iTmpVal = slice_arg[iLeft]
        var i, j = iLeft, iRight
        for i < j {
            fmt.Println("i,j = ", i, j)
            for i < j && slice_arg[j] > iTmpVal {
                j--
            }
            if i < j {
                slice_arg[i] = slice_arg[j]
                i++
            }

            for i < j && slice_arg[i] < iTmpVal {
                i++
            }
            if i < j {
                slice_arg[j] = slice_arg[i]
                j--
            }
        }
        slice_arg[i] = iTmpVal

        QuickSort(slice_arg, iLeft, i-1)
        QuickSort(slice_arg, j+1, iRight)
    }
}

 

 

延伸 · 閱讀

精彩推薦
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久久精品网站 | 国产精品日本欧美一区二区三区 | 国产福利视频在线 | 国产精品免费久久久久久久久 | 亚洲精品久久久久久久久久久 | 亚洲欧美在线观看 | 色婷网| 精品久久久久久久 | 久久久久高清 | 在线观看91视频 | 人妖天堂狠狠ts人妖天堂狠狠 | 极品久久| 亚洲成人综合网站 | 亚洲经典一区 | 欧美精品久久一区 | 久久人体视频 | 亚洲精品7777xxxx青睐 | 电影91久久久| 欧美精品亚洲精品日韩精品 | 日韩高清在线观看 | av在线黄 | 日韩和的一区二在线 | 日韩欧美国产一区二区 | 日韩一区在线播放 | 四季久久免费一区二区三区四区 | 精品一区二区三区免费视频 | 久久久久久夜精品精品免费 | 国产精品久久久久久亚洲调教 | 婷婷中文字幕 | 丰满白嫩老熟女毛片 | 国产亚洲精品久久19p | 国产99久久精品一区二区永久免费 | 黄工厂精品免费观看 | 在线91视频| 中文字幕不卡 | 不卡免费视频 | 久久综合一区 | 欧美精品1区2区 | 色女人的天堂 | 免费观看欧美一级大片 | 成人在线网站 |