Skip to content

Instantly share code, notes, and snippets.

@taji-taji
Last active September 22, 2015 09:00
Show Gist options
  • Save taji-taji/795c3af51a5dfeabc2ca to your computer and use it in GitHub Desktop.
Save taji-taji/795c3af51a5dfeabc2ca to your computer and use it in GitHub Desktop.
【ソートアルゴリズム】今さらだけどソートを復習しよう(バブルソート) ref: http://qiita.com/taji-taji/items/62db3bcf538400adc1e9
ソート前の値: [6 4 2 7 9 0 5 3 1 8]
1巡目
[6 4 2 7 9 0 5 3 (1) (8)]
[6 4 2 7 9 0 5 (3) (1) 8] > 入れ替え!
[6 4 2 7 9 0 (5) (1) 3 8] > 入れ替え!
[6 4 2 7 9 (0) (1) 5 3 8]
[6 4 2 7 (9) (0) 1 5 3 8] > 入れ替え!
[6 4 2 (7) (0) 9 1 5 3 8] > 入れ替え!
[6 4 (2) (0) 7 9 1 5 3 8] > 入れ替え!
[6 (4) (0) 2 7 9 1 5 3 8] > 入れ替え!
[(6) (0) 4 2 7 9 1 5 3 8] > 入れ替え!
1巡目終了後の値: [0 6 4 2 7 9 1 5 3 8]
2巡目
[0 6 4 2 7 9 1 5 (3) (8)]
[0 6 4 2 7 9 1 (5) (3) 8] > 入れ替え!
[0 6 4 2 7 9 (1) (3) 5 8]
[0 6 4 2 7 (9) (1) 3 5 8] > 入れ替え!
[0 6 4 2 (7) (1) 9 3 5 8] > 入れ替え!
[0 6 4 (2) (1) 7 9 3 5 8] > 入れ替え!
[0 6 (4) (1) 2 7 9 3 5 8] > 入れ替え!
[0 (6) (1) 4 2 7 9 3 5 8] > 入れ替え!
2巡目終了後の値: [0 1 6 4 2 7 9 3 5 8]
3巡目
[0 1 6 4 2 7 9 3 (5) (8)]
[0 1 6 4 2 7 9 (3) (5) 8]
[0 1 6 4 2 7 (9) (3) 5 8] > 入れ替え!
[0 1 6 4 2 (7) (3) 9 5 8] > 入れ替え!
[0 1 6 4 (2) (3) 7 9 5 8]
[0 1 6 (4) (2) 3 7 9 5 8] > 入れ替え!
[0 1 (6) (2) 4 3 7 9 5 8] > 入れ替え!
3巡目終了後の値: [0 1 2 6 4 3 7 9 5 8]
4巡目
[0 1 2 6 4 3 7 9 (5) (8)]
[0 1 2 6 4 3 7 (9) (5) 8] > 入れ替え!
[0 1 2 6 4 3 (7) (5) 9 8] > 入れ替え!
[0 1 2 6 4 (3) (5) 7 9 8]
[0 1 2 6 (4) (3) 5 7 9 8] > 入れ替え!
[0 1 2 (6) (3) 4 5 7 9 8] > 入れ替え!
4巡目終了後の値: [0 1 2 3 6 4 5 7 9 8]
5巡目
[0 1 2 3 6 4 5 7 (9) (8)] > 入れ替え!
[0 1 2 3 6 4 5 (7) (8) 9]
[0 1 2 3 6 4 (5) (7) 8 9]
[0 1 2 3 6 (4) (5) 7 8 9]
[0 1 2 3 (6) (4) 5 7 8 9] > 入れ替え!
5巡目終了後の値: [0 1 2 3 4 6 5 7 8 9]
6巡目
[0 1 2 3 4 6 5 7 (8) (9)]
[0 1 2 3 4 6 5 (7) (8) 9]
[0 1 2 3 4 6 (5) (7) 8 9]
[0 1 2 3 4 (6) (5) 7 8 9] > 入れ替え!
6巡目終了後の値: [0 1 2 3 4 5 6 7 8 9]
7巡目
[0 1 2 3 4 5 6 7 (8) (9)]
[0 1 2 3 4 5 6 (7) (8) 9]
[0 1 2 3 4 5 (6) (7) 8 9]
7巡目終了後の値: [0 1 2 3 4 5 6 7 8 9]
8巡目
[0 1 2 3 4 5 6 7 (8) (9)]
[0 1 2 3 4 5 6 (7) (8) 9]
8巡目終了後の値: [0 1 2 3 4 5 6 7 8 9]
9巡目
[0 1 2 3 4 5 6 7 (8) (9)]
9巡目終了後の値: [0 1 2 3 4 5 6 7 8 9]
ソート後の値: [0 1 2 3 4 5 6 7 8 9]
package main
import (
"fmt"
"strconv"
)
func main() {
arrayzor := []int{6, 4, 2, 7, 9, 0, 5, 3, 1, 8}
fmt.Printf("ソート前の値: %v\n", arrayzor)
// 要素数-1回 繰り返す
k := len(arrayzor) - 1
for i := 0; i < k; i++ {
fmt.Printf("%v巡目\n", i+1)
// 最後の要素から順番に比較をする
for j := k; j > i; j-- {
// 出力する文字列の処理
s := "["
for key, val := range arrayzor {
if key == j-1 || key == j {
s = s + "(" + strconv.Itoa(val) + ")"
} else {
s = s + strconv.Itoa(val)
}
if key != k {
s = s + " "
}
}
// 一つ前の要素と比較
if arrayzor[j-1] > arrayzor[j] {
// 一つ前の要素のほうが大きければ入れ替える
arrayzor[j-1], arrayzor[j] = arrayzor[j], arrayzor[j-1]
s = s + "] > 入れ替え!\n"
} else {
s = s + "]\n"
}
fmt.Printf("%s", s)
}
fmt.Printf("%v巡目終了後の値: %v\n\n", i+1, arrayzor)
}
fmt.Printf("ソート後の値: %v\n", arrayzor)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment