冒泡排序No.15

一、基本介绍

  • 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。
  • 抽象理解
    1. 班里学生排队,个高的在最后个小在最前
    2. 首先在一个参差不齐的队列里
    3. 以第一个学生为准让他和后面的每一个学生进行比对
    4. 当发现有比自己个高的时候,自己出来让这个比自己高的人和下一个比较(里层循环)
    5. 直到比完挑选出本轮最高的人
    6. 接下来在剩余的人里进行重复的操作,直到排完位置(外层循环)

二、演示冒泡过程的例子(图解)

冒泡排序No.15_第1张图片

三、冒泡排序代码实现

package main

import "fmt"
//分析冒泡排序
func  BubbleSort(arr *[5]int){

   fmt.Println("排序前",(*arr))

   tmp := 0 //定义临时变量

   flag := false; // 标识变量,表示是否进行过交换

   for j :=0 ; j < len(arr)-1 ;j++{

      //多次循环遍历的时候i是越来越小,j是增大的 用len(arry)-i-j实现遍历
      for  i := 0 ;i< len(arr)-1-j; i++{
         if arr[i] > arr[i+1] {
            flag = true
            tmp = arr[i]
            arr[i] = arr[i+1]
            arr[i+1] = tmp
         }

      }

      if !flag { // 在一趟排序中,一次交换都没有发生过
        break;
      } else {
        flag = false; // 重置 flag!!!, 进行下次判断
      }

   }

   fmt.Println("排序后",(*arr))
}

var arr2 [5]int = [5]int{24,69,80,57,13}

func main()  {

   BubbleSort(&arr2)  //传入数组的地址

}

 

 

你可能感兴趣的:(数据结构与算法)