国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

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

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

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

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

一、冒泡排序

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

 

復制代碼代碼如下:
//冒泡排序(排序10000個隨機整數,用時約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]  
            }  
        }  
    }  
}

二、選擇排序

 

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

 

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

三、快速排序

 

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

 

復制代碼代碼如下:
//快速排序(排序10000個隨機整數,用時約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  
}

四、插入排序

 

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

 

復制代碼代碼如下:
//插入排序(排序10000個整數,用時約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  
        }  
    }  
}

 

通過多次測試可以發現,快速排序是效率最高的。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河南省| 柳州市| 商丘市| 乐都县| 日喀则市| 庄河市| 哈巴河县| 监利县| 凤山市| 申扎县| 侯马市| 肃宁县| 邮箱| 永仁县| 景宁| 罗田县| 绥阳县| 深圳市| 开鲁县| 大厂| 莱芜市| 科技| 洞口县| 屏边| 淳安县| 隆回县| 鹤壁市| 富民县| 长子县| 交口县| 大石桥市| 凉山| 沈丘县| 安溪县| 无锡市| 黄梅县| 新蔡县| 宣恩县| 郑州市| 临清市| 徐汇区|