基本介绍

选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,经过和其他元素重整,再依原则交换位置后达到排序的目的。

选择排序思想

image.png

思路分析图

image.png

代码

  1. // 选择排序
  2. package main
  3. import "fmt"
  4. func selectSort(arr *[5]int) {
  5. for i := 0; i < len(arr)-1; i++ {
  6. max := arr[i]
  7. maxIndex := i
  8. for j := i + 1; j < len(arr); j++ {
  9. if arr[j] > max {
  10. max = arr[j]
  11. maxIndex = j
  12. }
  13. }
  14. if maxIndex != i {
  15. arr[i], arr[maxIndex] = arr[maxIndex], arr[i]
  16. }
  17. fmt.Printf("第 %v 次排序: %v\n", i+1, arr)
  18. }
  19. // max := arr[0]
  20. // maxIndex := 0
  21. // for i := 0 + 1; i < len(arr); i++ {
  22. // if arr[i] > max {
  23. // max = arr[i]
  24. // maxIndex = i
  25. // }
  26. // }
  27. // if maxIndex != 0 {
  28. // arr[0], arr[maxIndex] = arr[maxIndex], arr[0]
  29. // }
  30. // fmt.Println("第1次排序", arr)
  31. // max = arr[1]
  32. // maxIndex = 1
  33. // for i := 0 + 2; i < len(arr); i++ {
  34. // if arr[i] > max {
  35. // max = arr[i]
  36. // maxIndex = i
  37. // }
  38. // }
  39. // if maxIndex != 0 {
  40. // arr[1], arr[maxIndex] = arr[maxIndex], arr[1]
  41. // }
  42. // fmt.Println("第2次排序", arr)
  43. // max = arr[2]
  44. // maxIndex = 2
  45. // for i := 0 + 3; i < len(arr); i++ {
  46. // if arr[i] > max {
  47. // max = arr[i]
  48. // maxIndex = i
  49. // }
  50. // }
  51. // if maxIndex != 0 {
  52. // arr[2], arr[maxIndex] = arr[maxIndex], arr[2]
  53. // }
  54. // fmt.Println("第3次排序", arr)
  55. // max = arr[3]
  56. // maxIndex = 3
  57. // for i := 0 + 4; i < len(arr); i++ {
  58. // if arr[i] > max {
  59. // max = arr[i]
  60. // maxIndex = i
  61. // }
  62. // }
  63. // if maxIndex != 0 {
  64. // arr[3], arr[maxIndex] = arr[maxIndex], arr[3]
  65. // }
  66. // fmt.Println("第4次排序", arr)
  67. }
  68. func main() {
  69. arr := [5]int{10, 34, 19, 100, 80}
  70. fmt.Println("原数组")
  71. fmt.Println("arr = ", arr)
  72. selectSort(&arr)
  73. fmt.Println("排序后的数组")
  74. fmt.Println("arr = ", arr)
  75. }
  76. /*
  77. 原数组
  78. arr = [10 34 19 100 80]
  79. 第 1 次排序: &[100 34 19 10 80]
  80. 第 2 次排序: &[100 80 19 10 34]
  81. 第 3 次排序: &[100 80 34 10 19]
  82. 第 4 次排序: &[100 80 34 19 10]
  83. 排序后的数组
  84. arr = [100 80 34 19 10]
  85. */