Go语言教程之边写边学:数据结构与算法:冒泡排序

给定一个无序列表,我们比较列表中的相邻元素,每次都只放置两个元素,按正确的数量级排列。该算法取决于交换过程。在实现气泡排序算法时,知道交换多少次很重要。要对诸如 [3, 2, 1] 之类的数字列表进行排序,我们最多需要交换元素两次。这等于列表的长度减去1。

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {

	slice := generateSlice(20)
	fmt.Println("\n--- Unsorted --- \n\n", slice)
	bubblesort(slice)
	fmt.Println("\n--- Sorted ---\n\n", slice, "\n")
}

// Generates a slice of size, size filled with random numbers
func generateSlice(size int) []int {

	slice := make([]int, size, size)
	rand.Seed(time.Now().UnixNano())
	for i := 0; i < size; i++ {
		slice[i] = rand.Intn(999) - rand.Intn(999)
	}
	return slice
}
 
func bubblesort(items []int) {
    var (
        n = len(items)
        sorted = false
    )
    for !sorted {
        swapped := false
        for i := 0; i < n-1; i++ {
            if items[i] > items[i+1] {
                items[i+1], items[i] = items[i], items[i+1]
                swapped = true
            }
        }
        if !swapped {
            sorted = true
        }
        n = n - 1
    }
}

输出:

--- Unsorted ---

 [-129 755 38 354 248 6 -160 212 -184 336 -85 222 776 587 490 -503 -420 -54 -502 -341]

--- Sorted ---

 [-503 -502 -420 -341 -184 -160 -129 -85 -54 6 38 212 222 248 336 354 490 587 755 776]
  • 当前日期:
  • 北京时间:
  • 时间戳:
  • 今年的第:18周
  • 我的 IP:3.149.10.88
农历
五行
冲煞
彭祖
方位
吉神
凶神
极简任务管理 help
+ 0 0 0
Task Idea Collect