插入&選擇&快速排序
尚硅谷Golang課
插入&選擇&快速排序
//選擇排序
func SelectSort(array *[6]int) {
for j := 0; j < len(array)-1; j++ {
min := array[j]
minIndex := j
//尋找最小的下標
for i := j + 1; i < len(array); i++ {
if min > array[i] {
min = array[i]
minIndex = i
}
}
if minIndex != j {
array[j], array[minIndex] = array[minIndex], array[j]
}
fmt.Printf("第%d次交換後 %v\n", j+1, *array)
}
}
//插入排序
func InsertSort(arr *[6]int) {
for j := 1; j < len(arr); j++ {
//給第二個元素找位置
insertVal := arr[j]
insertIndex := j - 1 //下標
//由大到小
for insertIndex >= 0 && arr[insertIndex] < insertVal {
arr[insertIndex+1] = arr[insertIndex] //數據後移
insertIndex--
}
//插入
if insertIndex+1 != j {
arr[insertIndex+1] = insertVal
}
fmt.Printf("第%d次插入後 %v\n", j, *arr)
}
}
//快速排序
func QuickSort(left int, right int, array *[6]int) {
l := left
r := right
pivot := array[(left+right)/2] //中軸
//比pivot小就放到左邊,反之亦然
for l < r {
for array[l] < pivot {
l++
}
for array[r] > pivot {
r--
}
if l >= r { //表示分割完成
break
}
//如果沒完成就交換
array[l], array[r] = array[r], array[l]
//改善
if array[l] == pivot {
r--
}
if array[r] == pivot {
l++
}
}
//防卡住
if l == r {
l++
r--
}
if left < r {
QuickSort(left, r, array)
}
if right > l {
QuickSort(l, right, array)
}
}
func main() {
// var array = [6]int{10, 34, 19, 100, 80, -5}
// // SelectSort(&array)
// // InsertSort(&array)
// // fmt.Println(array)
// QuickSort(0, len(array)-1, &array)
// fmt.Println(array)
}
上次修改於 2021-09-01
此篇文章的評論功能已經停用。