使用go實現的排序演算法

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

go實現的部分排序演算法,待整理

// algorithm project main.gopackage mainimport (    "fmt")func main() {    arr := []int{50, 45, 42, 30, 25, 20, 20, 5, 60, 3, 23, 50, 29, 235, 9}    //arr := []int{50, 235, 60}    fmt.Println(arr)    fmt.Println("----------")    //直接插入排序    //arr1 := insertSort(arr)    //arr1 := selectSort(arr)    //a, b := selectMinAndMax(arr, 0, 14)    //arr1 := selectSortPlus(arr)    quickSort(arr, 0, len(arr)-1)    fmt.Println(arr)}/********  冒泡排序begin ********/func bubbleSort(arr []int) []int {    length := len(arr)    for j := length - 1; j > 0; j-- {        for i := 0; i < j; i++ {            if arr[i] > arr[i+1] {                exchange(arr, i, i+1)                fmt.Println(arr)            }        }        fmt.Println("++++++++++")    }    return arr}/********  冒泡排序end ********//*******  直接插入排序begin  ********///注意第一次排序應該是把第一位,即索引為0的看做一個有序序列了func insertSort(arr []int) []int {    //擷取當前數組長度    length := len(arr)    for i := 1; i < length; i++ {        //當前值        now := arr[i]        //如果當前哨兵小於之前序列中的某一個k的值,則序列從k向後整體移動一位        for j := i - 1; j >= 0; j-- {            if now < arr[j] {                arr[j+1] = arr[j]                arr[j] = now            } else {                arr[j+1] = now                break            }        }        fmt.Println(arr)    }    return arr}/*******  直接插入排序end  ********//*******  選擇排序-簡單選擇排序begin  ********///選出最小的key值/*@param arr 待排序數組@param i從第i個元素擷取最小值*/func selectMin(arr []int, i int) int {    length := len(arr)    minKey := i    minValue := arr[minKey]    //從下標為i及之後的元素中找出值最小的元素    for k := minKey + 1; k < length; k++ {        if minValue > arr[k] {            //如果當前值大於之後某一元素,說明不是最小值,和之後元素交換            minKey = k            minValue = arr[k]        }    }    return minKey}func exchange(arr []int, a int, b int) {    temp := arr[a]    arr[a] = arr[b]    arr[b] = temp}//開始進行選擇排序func selectSort(arr []int) []int {    length := len(arr)    for i := 0; i < length; i++ {        //每迴圈一次都找出當前未排序元素中的最小值,和當前元素進行交換        minKey := selectMin(arr, i)        exchange(arr, i, minKey)        fmt.Println(i, arr)    }    return arr}/*******  選擇排序-簡單選擇排序end  ********//********   選擇排序的改進,二元選擇排序begin ********/func selectMinAndMax(arr []int, i int, j int) (int, int) {    //length := len(arr)    minKey := i    minValue := arr[minKey]    maxKey := j    maxValue := arr[maxKey]    //從下標為i及之後的元素中找出值最小的元素    for k := minKey + 1; k < j; k++ {        if minValue > arr[k] {            //如果當前值大於之後某一元素,說明不是最小值,和之後元素交換            minKey = k            minValue = arr[k]        }        if maxValue < arr[k] {            maxKey = k            maxValue = arr[k]        }    }    return minKey, maxKey}func selectSortPlus(arr []int) []int {    length := len(arr)    //    for i := 0; i <= length/2; i++ {        //一次迴圈,找出最大和最小值,分別替換最大端和最小端頂頭部分        minKey, maxKey := selectMinAndMax(arr, i, length-1-i)        exchange(arr, i, minKey)        exchange(arr, length-1-i, maxKey)        fmt.Println(minKey, maxKey)    }    return arr}/********   選擇排序的改進,二元選擇排序end ********//******** 快速排序begin ********/func quickSort(arr []int, left int, right int) {    fmt.Println(left, right)    //設定基準數,選擇第一個作為基準數    baseKey := left    baseValue := arr[baseKey]    i := left    j := right    for i < j {        fmt.Println(i, j)        //先從右向左找,直到找到一個小於基準數的值        for (arr[j] >= baseValue) && (i < j) {            j--        }        if i < j {            //將j的值放到i的空位上            arr[i] = arr[j]        }        //從左向右找,直到找到一個大於基準數的值        for (i < j) && (arr[i] < baseValue) {            i++        }        if i < j {            //將此時的i放到之前j產生的空位上            arr[j] = arr[i]        }        fmt.Println(i, j)    }    arr[i] = baseValue    fmt.Println(arr)    if left < i-1 {        quickSort(arr, left, i-1)    }    if i+1 < right {        quickSort(arr, i+1, right)    }}/******** 快速排序end ********/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.