a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Golang > 正文

Go語言實現(xiàn)冒泡排序、選擇排序、快速排序及插入排序的方法

2020-04-01 19:21:43
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Go語言實現(xiàn)冒泡排序、選擇排序、快速排序及插入排序的方法,以實例形式詳細分析了幾種常見的排序技巧與實現(xiàn)方法,非常具有實用價值,需要的朋友可以參考下
 

本文實例講述了Go語言實現(xiàn)冒泡排序、選擇排序、快速排序及插入排序的方法。分享給大家供大家參考。具體分析如下:

算法是程序的靈魂,而排序算法則是一種最基本的算法。排序算法有許多種,這里介紹4中排序算法:冒泡排序,選擇排序,快速排序和插入排序,以從小到大為例。

一、冒泡排序

冒泡排序的原理是,對給定的數(shù)組進行多次遍歷,每次均比較相鄰的兩個數(shù),如果前一個比后一個大,則交換這兩個數(shù)。經(jīng)過第一次遍歷之后,最大的數(shù)就在最右側(cè)了;第二次遍歷之后,第二大的數(shù)就在右數(shù)第二個位置了;以此類推。

 

復(fù)制代碼代碼如下:
//冒泡排序(排序10000個隨機整數(shù),用時約145ms)  
func bubbleSort(nums []int) {  
    for i := 0; i < len(nums); i++ {  
        for j := 1; j < len(nums)-i; j++ {  
            if nums[j] < nums[j-1] {  
                //交換  
                nums[j], nums[j-1] = nums[j-1], nums[j]  
            }  
        }  
    }  
}

二、選擇排序

 

選擇排序的原理是,對給定的數(shù)組進行多次遍歷,每次均找出最大的一個值的索引。

 

復(fù)制代碼代碼如下:
//選擇排序(排序10000個隨機整數(shù),用時約45ms)  
func selectSort(nums []int) {  
    length := len(nums)  
    for i := 0; i < length; i++ {  
        maxIndex := 0  
        //尋找最大的一個數(shù),保存索引值  
        for j := 1; j < length-i; j++ {  
            if nums[j] > nums[maxIndex] {  
                maxIndex = j  
            }  
        }  
        nums[length-i-1], nums[maxIndex] = nums[maxIndex], nums[length-i-1]  
    }  
}

三、快速排序

 

快速排序的原理是,首先找到一個數(shù)pivot把數(shù)組‘平均'分成兩組,使其中一組的所有數(shù)字均大于另一組中的數(shù)字,此時pivot在數(shù)組中的位置就是它正確的位置。然后,對這兩組數(shù)組再次進行這種操作。

 

復(fù)制代碼代碼如下:
//快速排序(排序10000個隨機整數(shù),用時約0.9ms)  
func quickSort(nums []int) {  
    recursionSort(nums, 0, len(nums)-1)  
}  
  
func recursionSort(nums []int, left int, right int) {  
    if left < right {  
        pivot := partition(nums, left, right)  
        recursionSort(nums, left, pivot-1)  
        recursionSort(nums, pivot+1, right)  
    }  
}  
  
func partition(nums []int, left int, right int) int {  
    for left < right {  
        for left < right && nums[left] <= nums[right] {  
            right--  
        }  
        if left < right {  
            nums[left], nums[right] = nums[right], nums[left]  
            left++  
        }  
  
        for left < right && nums[left] <= nums[right] {  
            left++  
        }  
        if left < right {  
            nums[left], nums[right] = nums[right], nums[left]  
            right--  
        }  
    }  
    return left  
}

四、插入排序

 

插入排序的原理是,從第二個數(shù)開始向右側(cè)遍歷,每次均把該位置的元素移動至左側(cè),放在放在一個正確的位置(比左側(cè)大,比右側(cè)小)。

 

復(fù)制代碼代碼如下:
//插入排序(排序10000個整數(shù),用時約30ms)  
func insertSort(nums []int) {  
    for i := 1; i < len(nums); i++ {  
        if nums[i] < nums[i-1] {  
            j := i - 1  
            temp := nums[i]  
            for j >= 0 && nums[j] > temp {  
                nums[j+1] = nums[j]  
                j--  
            }  
            nums[j+1] = temp  
        }  
    }  
}

 

通過多次測試可以發(fā)現(xiàn),快速排序是效率最高的。

希望本文所述對大家的Go語言程序設(shè)計有所幫助。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊人青青久 | 亚洲激情一区二区 | 日韩精品久久久久久 | 欧美狠狠操 | 欧美一级黄色影院 | 一级黄色裸体片 | 99re国产 | wwwxxx日本 | 国产精品中文字幕在线播放 | 亚洲男人的天堂在线 | 亚洲精品免费观看 | 欧美在线一区二区三区 | 高潮毛片又色又爽免费 | 日韩久久久久久久久久 | 亚洲一区不卡 | 综合久久99| 91精品国产乱码久久蜜臀 | 91中文字幕在线观看 | 国产在线观看一区二区三区 | 国产精品自产av一区二区三区 | ririsao亚洲国产中文 | 日本午夜网 | 男女午夜网站 | 亚州中文 | 久久韩国 | 一区二区在线视频 | 久久久精品网站 | 亚洲精品二区三区 | 日韩成人免费 | 毛片网站在线 | 九色在线 | 九九精品视频在线 | 精品视频在线观看一区二区三区 | 欧美精品三区 | 91中文字幕在线观看 | 特级黄一级播放 | 国产在线区 | 中文字幕123伦 | 国产精品视屏 | 中文在线一区 | 一级全毛片 |