基本介绍
选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,经过和其他元素重整,再依原则交换位置后达到排序的目的。
选择排序思想
思路分析图
代码
// 选择排序package mainimport "fmt"func selectSort(arr *[5]int) {for i := 0; i < len(arr)-1; i++ {max := arr[i]maxIndex := ifor j := i + 1; j < len(arr); j++ {if arr[j] > max {max = arr[j]maxIndex = j}}if maxIndex != i {arr[i], arr[maxIndex] = arr[maxIndex], arr[i]}fmt.Printf("第 %v 次排序: %v\n", i+1, arr)}// max := arr[0]// maxIndex := 0// for i := 0 + 1; i < len(arr); i++ {// if arr[i] > max {// max = arr[i]// maxIndex = i// }// }// if maxIndex != 0 {// arr[0], arr[maxIndex] = arr[maxIndex], arr[0]// }// fmt.Println("第1次排序", arr)// max = arr[1]// maxIndex = 1// for i := 0 + 2; i < len(arr); i++ {// if arr[i] > max {// max = arr[i]// maxIndex = i// }// }// if maxIndex != 0 {// arr[1], arr[maxIndex] = arr[maxIndex], arr[1]// }// fmt.Println("第2次排序", arr)// max = arr[2]// maxIndex = 2// for i := 0 + 3; i < len(arr); i++ {// if arr[i] > max {// max = arr[i]// maxIndex = i// }// }// if maxIndex != 0 {// arr[2], arr[maxIndex] = arr[maxIndex], arr[2]// }// fmt.Println("第3次排序", arr)// max = arr[3]// maxIndex = 3// for i := 0 + 4; i < len(arr); i++ {// if arr[i] > max {// max = arr[i]// maxIndex = i// }// }// if maxIndex != 0 {// arr[3], arr[maxIndex] = arr[maxIndex], arr[3]// }// fmt.Println("第4次排序", arr)}func main() {arr := [5]int{10, 34, 19, 100, 80}fmt.Println("原数组")fmt.Println("arr = ", arr)selectSort(&arr)fmt.Println("排序后的数组")fmt.Println("arr = ", arr)}/*原数组arr = [10 34 19 100 80]第 1 次排序: &[100 34 19 10 80]第 2 次排序: &[100 80 19 10 34]第 3 次排序: &[100 80 34 10 19]第 4 次排序: &[100 80 34 19 10]排序后的数组arr = [100 80 34 19 10]*/
