最近用golang写了公司后台的数据处理服务,其中用到了list,需要对list中的元素进行排序,list自带的居然没这个功能,于是自己用选择排序实现了一下,为了方便后面Ctrl+C/V在此记录一下。
func main() {
l := list.New() // new一个list
for i := 0; i < 10; i++ { // 插入0~9
l.PushFront(i)
}
// 前面是按照顺序插入,为了防止巧合,这里随便插入几个数字
l.PushFront(100)
l.PushFront(0)
l.PushFront(1000)
for p := l.Front(); p != nil; p = p.Next() {
fmt.Print(p.Value, " ")
}
fmt.Println()
for p := l.Front(); p != nil && p.Next() != nil; p = p.Next() {
for p := l.Front(); p != nil; p = p.Next() {
fmt.Print(p.Value, ",")
}
fmt.Println()
for t := p.Next(); t != nil; {
fmt.Println(p.Value, " ", t.Value)
if p.Value.(int) > t.Value.(int) {
tNext := t.Next()
l.MoveBefore(t, p)
p = t
t = tNext
} else {
t = t.Next()
}
}
fmt.Println()
}
for p := l.Front(); p != nil; p = p.Next() {
fmt.Print(p.Value, " ")
}
fmt.Println()
}
运行结果
1000 0 100 9 8 7 6 5 4 3 2 1 0
1000,0,100,9,8,7,6,5,4,3,2,1,0, 第一次循环比较过程
1000 0
0 100
0 9
0 8
0 7
0 6
0 5
0 4
0 3
0 2
0 1
0 0
0,1000,100,9,8,7,6,5,4,3,2,1,0, 第二次循环比较过程
1000 100
100 9
9 8
8 7
7 6
6 5
5 4
4 3
3 2
2 1
1 0
0,0,1,2,3,4,5,6,7,8,9,100,1000, 第三次循环比较过程
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 100
1 1000
0,0,1,2,3,4,5,6,7,8,9,100,1000, 第四次
2 3
2 4
2 5
2 6
2 7
2 8
2 9
2 100
2 1000
0,0,1,2,3,4,5,6,7,8,9,100,1000, 第五次
3 4
3 5
3 6
3 7
3 8
3 9
3 100
3 1000
0,0,1,2,3,4,5,6,7,8,9,100,1000,
4 5
4 6
4 7
4 8
4 9
4 100
4 1000
0,0,1,2,3,4,5,6,7,8,9,100,1000,
5 6
5 7
5 8
5 9
5 100
5 1000
0,0,1,2,3,4,5,6,7,8,9,100,1000,
6 7
6 8
6 9
6 100
6 1000
0,0,1,2,3,4,5,6,7,8,9,100,1000,
7 8
7 9
7 100
7 1000
0,0,1,2,3,4,5,6,7,8,9,100,1000,
8 9
8 100
8 1000
0,0,1,2,3,4,5,6,7,8,9,100,1000,
9 100
9 1000
0,0,1,2,3,4,5,6,7,8,9,100,1000, 最后一次比较
100 1000
0,0,1,2,3,4,5,6,7,8,9,100,1000,
0 0 1 2 3 4 5 6 7 8 9 100 1000 比较结果