go实现耐心排序算法

前面我们讲解了耐心排序算法,今天我们来看一下代码的实现,直接上代码

package main

import (
    "fmt"
)

//耐心排序

func patienceSort(theArray[] int)[]int {
    newList := make([][]int, 0)
    for i := 0; i < len(theArray); i++ {
        bucketList := make([]int, 0)
        if (i == 0) {
            bucketList = append(bucketList, theArray[i])
            newList = append(newList, bucketList)
        } else {
            isOk := false;
            for j := 0; j < len(newList); j++ {
                if theArray[i] < newList[j][0] {
                    newList[j] = append(newList[j][:0], append([]int{theArray[i]}, newList[j][0:]...)...)
                    isOk = true;
                    break
                }
            }
            if (!isOk) {
                bucketList = append(bucketList, theArray[i])
                newList = append(newList, bucketList)
            }
        }
    }
    oklist := make([]int, 0)
    for m :=0; m < len(newList); m++{
        for n:=0; n < len(newList[m]); n++{
            oklist = append(oklist, newList[m][n])
        }
    }
    //fmt.Println(oklist)

    //插入排序
    theLen := len(oklist)
    var i int
    for i < theLen{
        var tmp = oklist[i]
        for m:=i-1; m>=0 && oklist[m]>tmp; m--{
            oklist[m],oklist[m+1] = oklist[m+1],oklist[m]//更简单的值互换方式
        }
        i++
    }
    return oklist
}
func main() {

    theArray := []int{6, 4, 5, 1, 8, 7, 2, 3}
    fmt.Print("排序前")
    fmt.Println(theArray)
    fmt.Print("排序后")
    fmt.Println(patienceSort(theArray))
}

运行结果如下

排序前[6 4 5 1 8 7 2 3]
排序后[1 2 3 4 5 6 7 8]

符合预期

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值