Go语言排序算法实现

1、冒泡排序

//Bubble sort
func SortValues(values []int) {
        flag := true
        for i := 0; i < len(values); i++ {
                flag = true
                for j := 0; j < len(values)-i-1; j++ {
                        if values[j] > values[j+1] {
                                values[j], values[j+1] = values[j+1], values[j]
                                flag = false
                        }
                }
                if flag == true {
                        break
                }
        }
}

2、快速排序

func QuickSort(values []int, start, end int) {
        if start > end {
                return
        }
        left, p := start, start
        right := end
        temp := values[p]
        for right > left {
                for values[right] > temp {
                        right--
                }
                values[right], values[p] = values[p], values[right]
                p = right
                for values[left] < temp {
                        left++
                }
                values[left], values[p] = values[p], values[left]
                p = left
        }
        QuickSort(values, start, left-1)
        QuickSort(values, right+1, end)
}

3、main函数

package main
import (
        "bufio"
        "fmt"
        "gosorter/msort"
        "io"
        "os"
        "path/filepath"
        "strconv"
)
//var infile = "file/unsorted.dat"
func main() {
        infile, err := filepath.Abs(filepath.Dir(os.Args[0]))
        if err != nil {
                return
        }
        infile = infile + "/sortfile/unsort.dat"
        values, err := readValueFromFile(infile)
        if err == nil {
                fmt.Println("read values:", values)
        } else {
                fmt.Println(err)
        }
        //msort.SortValues(values)
        //fmt.Println("read values:", values)
        msort.QuickSort(values, 0, len(values)-1)
        fmt.Println("read values:", values)
}
//get values from file,return []int values
func readValueFromFile(filepath string) (values []int, err error) {
        file, err1 := os.Open(filepath)
        if err1 != nil {
                fmt.Println("Failed to open file", filepath)
                err = err1
                return
        }
        //defer function
        defer file.Close()
        br := bufio.NewReader(file)
        values = make([]int, 0)
        for {
                line, isPrefix, err1 := br.ReadLine()
                if err1 != nil {
                        if err1 != io.EOF {
                                err = err1
                        }
                        break
                }
                if isPrefix {
                        fmt.Println("a too long line,seems unexpeted")
                        return
                }
                //make int to string
                str := string(line)
                value, err1 := strconv.Atoi(str)
                if err1 != nil {
                        err = err1
                        return
                }
                values = append(values, value)
        }
        return
}

4、排序配置文集unsort.dat,内存放需要排序的整形序列

猜你喜欢

转载自blog.csdn.net/luoye4321/article/details/82263666