亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

Go語言展現快速排序算法全過程的思路及代碼示例

2020-04-01 19:11:08
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Go語言展現快速排序算法全過程的思路及代碼示例,文章最后作者還提到了對Quick Sort算法優化的一些想法,需要的朋友可以參考下
 

快速排序算法
快速排序是一個遞歸的思想,首先選擇一個數作為基數,把數組中小于它的數放在它的左邊,把大于它的數放在它的右邊,然后對左右兩邊的數遞歸進行排序。

算法的關鍵部分是實現數組的劃分,即怎么把數組的元素劃分成兩部分,使得左邊的數比基數小,右邊的數比基數大。劃分有許多不同的實現方法,這里主要使用單向掃描的方法,后面再稍微介紹雙向掃描的方法。

選擇最右邊的數字作為基數。使用一個變量j記錄當前左邊數字(比基數小的數)的最右的下標值。然后使用變量i從左到右遍歷數組,如果a[i]比基數小,說明a[i]屬于左邊的數,就把j自增,然后交換a[j]和當前的a[i]。因為自增前的j是左邊數字最右的下標,自增后的a[j]肯定不屬于左邊了,把其跟a[i]交換后,新的a[j]是屬于左邊的,而且此時j也重新變為左邊數字最右的下標了。

掃描結束后,把j自增(因為a[j]將會被交換到最右邊,因此要選屬于右邊的數字)后與最右邊的基數交換,此時的j即為劃分的結果。

Golang版的實現例子:

 

復制代碼代碼如下:

 

package main
import "fmt"
 
type ElemType int;
 
func main() {
    data := make([]ElemType, 600000) // ALL ZERO
    var i int = 0;
    var dlen int = len(data);
    for i = 0 ; i < dlen ; i++{
        data[i] = (ElemType)(dlen - i -1);
    }
    fmt.Println("Start ...",len(data));
    for i = 0 ; i < 100 ; i++{
        fmt.Printf("%d ", data[i]); 
    }
    fmt.Println();
    QuickSort(data,0,dlen-1);
     
    fmt.Println("End ...");
    for i = 0 ; i < 100 ; i++{
        fmt.Printf("%d ", data[i]); 
    }
    fmt.Println();
}
 
func QuickSort(A []ElemType,low, high int){
    if low < high {
        // Partition() is the operation of divide A[low ... high]
        // one to two arrays which can be used as QuickSort Again
        pivotpos := Partition(A,low,high);
        QuickSort(A,low,pivotpos-1);
        QuickSort(A,pivotpos+1,high);
    }
}
 
func Partition(A []ElemType,low ,high int)  int {
    var pivot ElemType = A[low];
    var tmp ElemType;
    //Method I:
    //for low < high {
    //  for low < high && A[high] >= pivot { high-- ; }
    //  A[low] = A[high];
    //  for low < high && A[low] < pivot { low++; }
    //  A[high] = A[low];
    //} 
    //end of MI
     
    //Method II:
    for (low < high) && (A[high] > pivot) { high --; }
    for (low < high) && (A[low] < pivot) {low++; }
    for low < high {
        // swap A[low] & A[high]
        tmp = A[low];
        A[low] = A[high];
        A[high] = tmp;
        low ++;
        high --;
    }
    //end of MII
 
    A[low] = pivot ;
    return low ;
}

 


執行輸出如下:

 

[yu@argcandargv-com quicksort]$ go build quicksort.go [yu@argcandargv-com quicksort]$ ls

 

quicksort quicksort.go
[yu@argcandargv-com quicksort]$ time ./quicksort
Start ... 600000599999 599998 599997 599996 599995 599994 599993 599992 599991 599990 599989 599988 599987 599986 599985 599984 599983 599982 599981 599980 599979 599978 599977 599976 599975 599974 599973 599972 599971 599970 599969 599968 599967 599966 599965 599964 599963 599962 599961 599960 599959 599958 599957 599956 599955 599954 599953 599952 599951 599950 599949 599948 599947 599946 599945 599944 599943 599942 599941 599940 599939 599938 599937 599936 599935 599934 599933 599932 599931 599930 599929 599928 599927 599926 599925 599924 599923 599922 599921 599920 599919 599918 599917 599916 599915 599914 599913 599912 599911 599910 599909 599908 599907 599906 599905 599904 599903 599902 599901 599900 End ...0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 

 

real  1m55.564suser  1m55.215ssys 0m0.052s

PS:其實應用中有一個優化,因為快速排序在數組本來有序的情況下復雜度會退化為O(n^2)。為了避免這點,在選取基數的時候可以隨機地進行選擇。具體做法是把最右邊的數字跟一個隨機的數字交換位置。另外還有一種三數取中的方法,即選擇首尾跟中間某個數共三個數的中值作為基數。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲精品一区二区| 亚洲欧美中文字幕| 性色av一区二区三区在线观看| 日韩av在线最新| 日韩精品免费在线观看| 亚洲欧美中文日韩v在线观看| 日韩高清有码在线| 精品女同一区二区三区在线播放| 亚洲国产美女久久久久| 久久久久久久久久久免费| 午夜精品www| 欧美理论电影在线观看| 欧美午夜激情小视频| 久久香蕉频线观| 日韩欧中文字幕| 亚洲精品一区二区三区不| 日韩av网址在线观看| 久久久在线视频| 最新国产精品拍自在线播放| 国产精品国产自产拍高清av水多| 欧美成年人视频网站欧美| 欧美另类老女人| 国产精品欧美一区二区三区奶水| 欧美成人亚洲成人日韩成人| 久久天天躁狠狠躁夜夜躁2014| 欧美一级淫片videoshd| 欧美性xxxxxxxxx| 永久555www成人免费| 中文字幕亚洲色图| 欧美精品18videos性欧| 日韩精品视频三区| 国产日韩欧美夫妻视频在线观看| 日韩精品中文字幕有码专区| 日本精品视频在线播放| 久久亚洲精品一区二区| 欧美成人午夜剧场免费观看| 亚洲天堂视频在线观看| 久久网福利资源网站| 2018中文字幕一区二区三区| 国产91精品最新在线播放| 亚洲色图17p| 在线精品国产欧美| www.xxxx欧美| 在线观看欧美视频| 亚洲成人a级网| 国产日韩欧美在线看| 久久理论片午夜琪琪电影网| 日韩经典第一页| 日韩av在线影视| 国产丝袜一区视频在线观看| 亚洲成人激情视频| 欧洲午夜精品久久久| 欧美在线视频观看免费网站| 亚洲视频在线免费观看| 一区二区成人av| 精品偷拍各种wc美女嘘嘘| 国模私拍视频一区| 国内精品模特av私拍在线观看| 亚洲精品一区中文| 大桥未久av一区二区三区| 日韩中文字幕在线观看| 91精品久久久久久久久久久| 亚洲国产精品成人va在线观看| 国产精品女人网站| 丝袜美腿亚洲一区二区| 亚洲乱码av中文一区二区| 欧美性猛交视频| 日韩av中文字幕在线免费观看| 亚洲人成电影网站| 久久躁日日躁aaaaxxxx| 亚洲一区二区自拍| 国产精品久久久久不卡| 亚洲女人被黑人巨大进入al| 国产精品永久免费观看| 高清欧美性猛交xxxx黑人猛交| 久久激情视频免费观看| 国产精品人成电影在线观看| 九九九久久国产免费| 欧美激情一区二区久久久| 日韩av在线免费观看一区| 国模视频一区二区| 亚洲欧美日韩一区二区在线| 亚洲自拍偷拍第一页| 日韩av在线天堂网| 懂色aⅴ精品一区二区三区蜜月| 在线视频亚洲欧美| 欧美日韩成人在线观看| 国产精品中文字幕久久久| 97超碰色婷婷| 国产mv免费观看入口亚洲| 欧美一级电影在线| 欧美黑人xxxⅹ高潮交| 亚洲少妇中文在线| 国产精品久久色| 色偷偷亚洲男人天堂| 亚洲国产精品人人爽夜夜爽| 亚洲欧美日韩天堂一区二区| 色综合91久久精品中文字幕| 国产欧美精品在线播放| 欧美电影在线观看高清| 国产精品久久久久久久av电影| 亚洲高清色综合| 国产综合在线视频| 欧美老少配视频| 91高清免费在线观看| 1769国内精品视频在线播放| 国产精品h片在线播放| 黄色一区二区三区| 久久99精品国产99久久6尤物| 中日韩午夜理伦电影免费| 亚洲国产日韩欧美在线图片| 69视频在线播放| 国产精品劲爆视频| 在线观看亚洲区| 一个人看的www久久| 在线播放日韩欧美| 日韩高清av在线| 欧美一区二区三区图| 少妇高潮久久久久久潘金莲| 性色av一区二区三区| 久久精品国产69国产精品亚洲| 久久久久免费精品国产| 视频一区视频二区国产精品| 欧美日韩午夜剧场| 国产精品专区第二| 夜色77av精品影院| 一本大道香蕉久在线播放29| 国产精品欧美日韩| 国产精品久久久久免费a∨大胸| 欧美成人午夜激情| 亚洲天堂成人在线视频| 国产欧美日韩丝袜精品一区| 在线观看视频99| 亚洲最大成人在线| 欧美怡春院一区二区三区| 国产精品视频公开费视频| 色伦专区97中文字幕| 精品色蜜蜜精品视频在线观看| 国产成人黄色av| 精品自拍视频在线观看| 亚洲第一中文字幕| 欧美三级欧美成人高清www| 欧美在线视频在线播放完整版免费观看| 国产一区二区黑人欧美xxxx| 亚洲国产福利在线| 日韩一区二区精品视频| 疯狂蹂躏欧美一区二区精品| 色妞欧美日韩在线| 日韩精品一区二区三区第95| 国产精彩精品视频| 色偷偷av一区二区三区乱| 久久99视频免费| 九九综合九九综合| 欧美一二三视频| 成人在线国产精品| 人人澡人人澡人人看欧美| 国产成人精品久久久| 欧美精品在线网站| 国产精品情侣自拍| 亚洲成在人线av| 日韩av在线精品| 久久久爽爽爽美女图片| 亚洲精品一区二区三区不| 欧美性猛交xxxx乱大交蜜桃|