国产探花免费观看_亚洲丰满少妇自慰呻吟_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語言程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 二连浩特市| 依安县| 潮安县| 山阴县| 疏勒县| 临漳县| 深州市| 宁晋县| 天全县| 溆浦县| 商丘市| 青州市| 都安| 河北区| 普兰店市| 富裕县| 柳河县| 子洲县| 康定县| 蓝山县| 长春市| 汕头市| 镇赉县| 广东省| 格尔木市| 淮阳县| 斗六市| 塔河县| 凌源市| 贵定县| 新津县| 孙吴县| 米泉市| 金沙县| 普定县| 资溪县| 南投县| 陆河县| 忻州市| 福清市| 永靖县|