前面我们讲解了耐心排序算法,今天我们来看一下代码的实现,直接上代码
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]
符合预期