Golang排序算法之冒泡排序

216 阅读1分钟
冒泡排序
原理:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

func BubbleSortV1(arr []int) []int {  
    length := len(arr)  
    if length <= 1 { 
       return arr  
    }  
    for i := 0; i < length-1; i++ { 
       for j := 0; j < length-1-i; j++ {
          if arr[j] > arr[j+1] {
            arr[j], arr[j+1] = arr[j+1], arr[j]      
            }    
       }    
        fmt.Printf("第%d次:%v\n", i+1, arr)  
    }  
    return arr
}

改进版本,添加一个标识,如果一直未发生交换说明是有序的,则不用继续循环。

func BubbleSortV2(arr []int) []int {  
    length := len(arr)  
    if length <= 1 {
        return arr  
    }  
    for i := 0; i < length-1; i++ {  
      isChange := false    
      for j := 0; j < length-1-i; j++ {
          if arr[j] > arr[j+1] { 
           arr[j], arr[j+1] = arr[j+1], arr[j] 
           isChange = true      
      }    
    }    
    if !isChange {      
        break    
    }    
    fmt.Printf("第%d次:%v\n", i+1, arr)  
    }  
    return arr
}