常见的排序方法

冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func bubbleSort(arr []int) {
flage := false
for i := range arr {
for j := 0; j < len(arr)-i-1; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
flage = true
}
}
if !flage {
return
}
flage = false
}
return
}

选择排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func ChooseSort(arr []int) {
n := len(arr)
for i := range arr {
minnPos := i
for j := i + 1; j < n; j++ {
if arr[j] < arr[minnPos] {
minnPos = j
}
}
if minnPos != i {
arr[minnPos], arr[i] = arr[i], arr[minnPos]
}
}
return
}

归并排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 归并排序
func mergeSort(arr []int) []int {
n := len(arr)
if n <= 1 {
return arr
}
mid := n / 2
left := mergeSort(arr[:mid])
right := mergeSort(arr[mid:])
return merge(left, right)
}
func merge(left, right []int) []int {
res := make([]int, 0, len(left)+len(right))

for len(left) > 0 && len(right) > 0 {
if left[0] <= right[0] {
res = append(res, left[0])
left = left[1:]
} else {
res = append(res, right[0])
right = right[1:]
}
}

res = append(res, left...)
res = append(res, right...)
return res
}

快速排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func quickSort(arr []int) {
n := len(arr)
if n <= 1 {
return
}

pivot := arr[n-1]
left := make([]int, 0, n-1)
right := make([]int, 0, n-1)
for i := range arr[:n-1] {
if arr[i] <= pivot {
left = append(left, arr[i])
} else {
right = append(right, arr[i])
}
}
quickSort(left)
quickSort(right)
copy(arr, left)
arr[len(left)] = pivot
copy(arr[len(left)+1:], right)
}

堆排序


常见的排序方法
http://example.com/2024/02/28/常见的排序方法/
作者
Forrest
发布于
2024年2月28日
许可协议