Skip to content

Commit 8985410

Browse files
committed
add insertion 插入排序
1 parent 5ef02ef commit 8985410

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

insertion_sort.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package algorithm
2+
3+
// InsertionSort ..
4+
// 算法步骤:
5+
// 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
6+
// 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。
7+
//(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
8+
func InsertionSort(arr []int) []int {
9+
for i := range arr {
10+
preIndex := i - 1
11+
current := arr[i]
12+
for preIndex >= 0 && arr[preIndex] > current {
13+
arr[preIndex+1] = arr[preIndex]
14+
preIndex--
15+
}
16+
arr[preIndex+1] = current
17+
}
18+
return arr
19+
}

insertion_sort_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package algorithm
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestInsertionSort(t *testing.T) {
11+
arr := []int{3, 2, 0, 5, 10, 1}
12+
arrSort := InsertionSort(arr)
13+
fmt.Printf("arr after sored: %v\n", arrSort)
14+
assert.Equal(t, 10, arrSort[5])
15+
assert.Equal(t, 5, arrSort[4])
16+
}

0 commit comments

Comments
 (0)