东林博客

Go语言实现经典的冒泡排序

题目:

可以输入任意数量的数字,以空格隔开,进行从小到大的排序。

package main

import (
   "bufio"
   "fmt"
   "os"
   "strings"
)
/**
冒泡排序
 */
func main() {
   var str string
   fmt.Println("请输入任意个数的数字,用空格隔开,实现从小到大自动排序:")
   Scanf(&str)
   // 把str转为数组
   a := strings.Split(str," ")
   var n = len(a)
   for i := 1; i<=n-1;i++{
      fmt.Println("--------第",i,"次冒泡--------")
      for j := 0; j<n-i;j++{
         if a[j] > a[j+1] {
            t := a[j];
            a[j] = a[j+1]
            a[j+1] = t
         }
         fmt.Println(a)
      }

   }
   fmt.Println("--------最终结果--------\n",a)

}
func Scanf(str *string)  {
   reader := bufio.NewReader(os.Stdin)

   data,_,_ := reader.ReadLine()

   *str = string(data);
}

执行结果:

请输入任意个数的数字,用空格隔开,实现从小到大自动排序:
32 21 12 33 34 34 87 24
--------第 1 次冒泡--------
[21 32 12 33 34 34 87 24]
[21 12 32 33 34 34 87 24]
[21 12 32 33 34 34 87 24]
[21 12 32 33 34 34 87 24]
[21 12 32 33 34 34 87 24]
[21 12 32 33 34 34 87 24]
[21 12 32 33 34 34 24 87]
--------第 2 次冒泡--------
[12 21 32 33 34 34 24 87]
[12 21 32 33 34 34 24 87]
[12 21 32 33 34 34 24 87]
[12 21 32 33 34 34 24 87]
[12 21 32 33 34 34 24 87]
[12 21 32 33 34 24 34 87]
--------第 3 次冒泡--------
[12 21 32 33 34 24 34 87]
[12 21 32 33 34 24 34 87]
[12 21 32 33 34 24 34 87]
[12 21 32 33 34 24 34 87]
[12 21 32 33 24 34 34 87]
--------第 4 次冒泡--------
[12 21 32 33 24 34 34 87]
[12 21 32 33 24 34 34 87]
[12 21 32 33 24 34 34 87]
[12 21 32 24 33 34 34 87]
--------第 5 次冒泡--------
[12 21 32 24 33 34 34 87]
[12 21 32 24 33 34 34 87]
[12 21 24 32 33 34 34 87]
--------第 6 次冒泡--------
[12 21 24 32 33 34 34 87]
[12 21 24 32 33 34 34 87]
--------第 7 次冒泡--------
[12 21 24 32 33 34 34 87]
--------最终结果--------
 [12 21 24 32 33 34 34 87]

这里遇到一个Go的scanln的一个坑,和C不同,Go的Scanln不能接收包含空格的字符。会自动取空格前的字符。

所以,自己封装了一个。实现读取整行,来进行字符串切割。类似PHP的explode

{{tip}}