冒泡排序和選擇排序(Go語言實現)

冒泡排序和選擇排序是排序算法中比較簡單和容易實現的算法。冒泡排序的思想爲:每一次排序過程,經過相鄰元素的交換,將當前沒有排好序中的最大(小)移到數組的最右(左)端。而選擇排序的思想也很直觀:每一次排序過程,咱們獲取當前沒有排好序中的最大(小)的元素和數組最右(左)端的元素交換,循環這個過程便可實現對整個數組排序。 
選擇排序的平均時間複雜度比冒泡排序稍高,下面咱們使用GO語言進行編寫算法

冒泡排序

func bubble(num []int64) []int64 {
    flag := true
    for i := len(num) - 1; i >= 0; i-- {
        for j := 0; j < i; j++ {
            //冒泡,泡沫往上越大,較大的數上移
            if num[j] > num[j + 1] {
                Swap(num, j, j + 1)
                flag=false
            }
        }
        //優化沒必要要的交換
        if flag {
            break
        }
    }

    return num
}



func Swap(num []int64, i int, j int) {
    temp := num[i]
    num[i] = num[j]
    num[j] = temp
}

選擇排序

func Select(num []int64) []int64 {
    for i := 0; i < len(num) - 2; i++ {
        min:=num[i]
        local:= i
        for j := i + 1; j <= len(num)-1; j++ {
            if min>num[j] {
                min=num[j]
                local=j
            }
        }
        Swap(num,local,i)
    }
    return num
}

func Swap(num []int64, i int, j int) {
    temp := num[i]
    num[i] = num[j]
    num[j] = temp
}

 

 

package main

import "fmt"
import "./sel"
//變量在前,類型在後
func main() {
    num :=[]int64{11, 5, 25, 3, 42, 27,53,82,11, 2}
    //bub.bubble(num)
    sel.Select(num)
    for i ,_:=range num {
        fmt.Print(i)
    }
}
相關文章
相關標籤/搜索