规则

每一轮操作找出一个最大值:比较数值,交换位置,直到最大的数值,经依次的交换位置排放到最后的位置
循环每一轮的操作,依次找出每一轮的最大值,直到确定每一轮的最大值即可

图解

image.png

代码实现

  1. package main
  2. import "fmt"
  3. func sortBubble(arr *[5]int) {
  4. temp := 0
  5. for i := 0; i < len(*arr)-1; i++ {
  6. for j := 0; j < len(*arr)-1-i; j++ {
  7. if (*arr)[j] > (*arr)[j+1] {
  8. // (*arr)[j] > (*arr)[j+1] 从小到大 交换位置
  9. // (*arr)[j] < (*arr)[j+1] 从大到小 交换位置
  10. temp = (*arr)[j]
  11. (*arr)[j] = (*arr)[j+1]
  12. (*arr)[j+1] = temp
  13. }
  14. }
  15. fmt.Printf("第%v轮排序后的结果: %v \n", i+1, *arr)
  16. }
  17. /* for j := 0; j < len(arr)-1; j++ {
  18. if (*arr)[j] > (*arr)[j+1] {
  19. // 交换位置
  20. temp = (*arr)[j]
  21. (*arr)[j] = (*arr)[j+1]
  22. (*arr)[j+1] = temp
  23. }
  24. }
  25. fmt.Println("第1轮排序后的结果: ", *arr)
  26. for j := 0; j < len(arr)-2; j++ {
  27. if (*arr)[j] > (*arr)[j+1] {
  28. // 交换位置
  29. temp = (*arr)[j]
  30. (*arr)[j] = (*arr)[j+1]
  31. (*arr)[j+1] = temp
  32. }
  33. }
  34. fmt.Println("第2轮排序后的结果: ", *arr)
  35. for j := 0; j < len(arr)-3; j++ {
  36. if (*arr)[j] > (*arr)[j+1] {
  37. // 交换位置
  38. temp = (*arr)[j]
  39. (*arr)[j] = (*arr)[j+1]
  40. (*arr)[j+1] = temp
  41. }
  42. }
  43. fmt.Println("第3轮排序后的结果: ", *arr)
  44. for j := 0; j < len(arr)-4; j++ {
  45. if (*arr)[j] > (*arr)[j+1] {
  46. // 交换位置
  47. temp = (*arr)[j]
  48. (*arr)[j] = (*arr)[j+1]
  49. (*arr)[j+1] = temp
  50. }
  51. }
  52. fmt.Println("第4轮排序后的结果: ", *arr) */
  53. }
  54. func main() {
  55. var arr [5]int = [5]int{24, 69, 80, 57, 13}
  56. fmt.Println("排序前 arr = ", arr)
  57. // 冒泡排序
  58. sortBubble(&arr)
  59. fmt.Println("排序后 arr = ", arr)
  60. }
  61. 排序前 arr = [24 69 80 57 13]
  62. 1轮排序后的结果: [24 69 57 13 80]
  63. 2轮排序后的结果: [24 57 13 69 80]
  64. 3轮排序后的结果: [24 13 57 69 80]
  65. 4轮排序后的结果: [13 24 57 69 80]
  66. 排序后 arr = [13 24 57 69 80]