时间复杂度:O(n^2)

    • 最好:O(n)
      • 数组中数据有序,只需要遍历一次且不需要交换
    • 最坏:O(n^2)

    空间复杂度:O(1)

    • 只需要一个额外空间用于数据交换

    原理
    比较两个相邻的数组元素,使起满足条件交换元素位置,直到n-1轮循环操作结束。

    实现

    1. 从头部开始,比较相邻的两个元素 arr[j]arr[j+1] ,如果前一个元素比后一个元素大,进行数据交换。
    2. 下标向后移动,即使 j=j+1 ,再次比较元素 arr[j]arr[j+1] ,判断是否需要交换数据。
    3. 针对序列中每一对两两相邻的数据重复以上步骤,直到下标指向最后一个位置。
    4. 在每一轮循环中重复以上步骤 (1)(2)(3),直到 len-1 轮循环执行完毕。

      1. // 冒泡排序、降序排序
      2. func BubbleSort(slice []int) []int {
      3. if len(slice) < 2 {
      4. return slice
      5. }
      6. for i := 0; i < len(slice)-1; i++ {
      7. for j := 0; j < len(slice)-1-i; j++ {
      8. if slice[j] < slice[j+1] {
      9. slice[j], slice[j+1] = slice[j+1], slice[j]
      10. }
      11. }
      12. }
      13. return slice
      14. }