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,内存放需要排序的整形序列