zoukankan      html  css  js  c++  java
  • GO语言(五)项目搭建

    <sorter>

          |------<src>(手动添加,代码存放处)

           |------sorter.go

                |------<algorithm>

                  |--------<qsort>

                          |-------qsort.go

                          |-------qsort_test.go

                  |--------<bubblesort>

                            |-------bubblesort.go

                          |-------bubblesort_test.go

          |------<pkg> (自动生成,保存静态编译文件)

      |------<bin>(自动生成,保存可执行文件)

    [注]

      <>是目录,*.go是文件;

      写5个文件,如下:

    ------------------------------------------------------------------------------------------

    [qsort.go]

      

     1 package qsort
     2 
     3 func quickSort(values []int, left,right int) {
     4   temp := values[left]
     5   p := left
     6   i,j := left,right
     7 
     8   for i<=j {
     9     for j >= p && values[j] >= temp {
    10       j-- 
    11     }   
    12     if j >= p { 
    13       values[p] = values[j]
    14       p = j 
    15     }   
    16 
    17     for i <= p && values[i] <= temp {
    18       i++ 
    19     }   
    20     if i <= p { 
    21       values[p] = values[i]
    22       p = i 
    23     }   
    24   }
    25   values[p] = temp
    26   if p - left > 1 { 
    27     quickSort(values, left, p-1)
    28   }
    29   if right - p > 1 { 
    30     quickSort(values, p+1, right)
    31   }
    32 }
    33 
    34 func QuickSort(values []int) {
    35   quickSort(values, 0, len(values)-1)
    36 }

    [qsort_test.go]

     1 package qsort
     2 
     3 import "testing"
     4 
     5 func TestQuickSort1(t *testing.T) {
     6   values := []int{5,4,3,2,1}
     7   QuickSort(values)
     8   if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 4 || values[4] != 5 { 
     9     t.Error("QuickSort() failed. Got", values, "Expected 1 2 3 4 5")
    10   }
    11 }

    [bubblesort.go]

     1 package bubblesort
     2 
     3 func BubbleSort(values []int) {
     4   flag := true
     5 
     6   for i:=0; i<len(values); i++ {
     7     flag = true
     8 
     9     for j:=0; j<len(values)-i-1; j++{
    10       if values[j] > values[j+1] {
    11         values[j],values[j+1] = values[j+1],values[j]
    12         flag = false
    13       }   
    14     }   
    15 
    16     if(flag == true) {
    17       break
    18     }   
    19   }
    20 }

    [bubblesort_test.go]

     1 package bubblesort
     2 
     3 import "testing"
     4 
     5 func TestBubbleSort1(t *testing.T) {
     6   values := []int{5,4,3,2,1}
     7   BubbleSort(values)
     8   if values[0]!=1 || values[1]!=2 || values[2]!=3 || values[3]!=4 || values[4]!=5 {
     9     t.Error("BubbleSort() failed.Got", values, "Expected 1 2 3 4 5.")
    10   }
    11 }

    [sorter.go]

     1 package main
     2 
     3 import (
     4   "fmt"
     5   "flag"
     6   "bufio"
     7   "io"
     8   "os"
     9   "strconv"
    10   "time"
    11   "sorter/algorithm/qsort"
    12   "sorter/algorithm/bubblesort"
    13 )
    14 
    15 var infile *string = flag.String("i", "unsorted.dat", "File contains values for sorting")
    16 var outfile *string = flag.String("o", "sorted.dat", "File to receive sorted values")
    17 var algorithm *string = flag.String("a", "qsort", "Sort algorithm")
    18 
    19 func readValues(infile string)(values []int, err error) {
    20   file, err := os.Open(infile)
    21   if err != nil {
    22     fmt.Println("Failed to open the input file ", infile)
    23     return
    24   }
    25 
    26   defer file.Close()
    27 
    28   br := bufio.NewReader(file)
    29   values = make([]int, 0)
    30 
    31   for  {
    32     line, isPrefix, errl := br.ReadLine()
    33 
    34     if errl != nil {
    35       if errl != io.EOF {
    36         err = errl
    37       }
    38       break
    39     }
    40 
    41     if isPrefix {
    42       fmt.Println("A too long line, seems unexpected.")
    43       return
    44     }
    45 
    46     str := string(line)
    47     value, errl := strconv.Atoi(str)
    48     if errl != nil {
    49       err = errl
    50       return
    51     }
    52     values = append(values, value)
    53   }
    54   return
    55 }
    56 
    57 func writeValues(values []int, outfile string) error {
    58   file, err := os.Create(outfile)
    59   if err != nil {
    60     fmt.Println("Failed to create the output file ", outfile)
    61     return err
    62   }
    63 
    64   defer file.Close()
    65 
    66   for _,value := range values {
    67     str := strconv.Itoa(value)
    68     file.WriteString(str + "
    ")
    69   }
    70   return nil
    71 }
    72 
    73 func main() {
    74   flag.Parse()
    75   if infile != nil {
    76     fmt.Println("infile=", *infile, "outfile=", *outfile, "algorithm=", *algorithm)
    77   }
    78 
    79   values, err := readValues(*infile)
    80   if err == nil {
    81     fmt.Println("Read values: ", values)
    82     t1 := time.Now()
    83     switch *algorithm {
    84       case "qsort" :
    85         qsort.QuickSort(values)
    86       case "bubblesort":
    87         bubblesort.BubbleSort(values)
    88       default:
    89         fmt.Println("Sorting algorithm", *algorithm, "is either unknown or unsupported.")
    90     }
    91     t2 := time.Now()
    92 
    93     fmt.Println("The sorting process costs", t2.Sub(t1), "to cpmplete")
    94 
    95     writeValues(values, *outfile)
    96   }else {
    97     fmt.Println(err)
    98   }
    99 }

    之后,返回到sorter目录节点,依次执行如下命令:(GOPATH:必须加入sorter的目录)

    go build sorter/algorithm/qsort

    go build sorter/algorithm/bubblesort

    go test sorter/algorithm/qsort

    go test sorter/algorithm/bubblesort

    go install sorter/algorithm/qsort

    go install sorter/algorithm/bubblesort

    go build sorter

    go install sorter

    ;bin目录下会有sorter的可执行文件生成;

    ----------------------------------------------------------------------------------------

    bin目录下放入一个unsorted.bat文件,文件内容为

    23

    10

    234

    89

    190

    ;执行命令:./sorter,会生成一个sorted.bat文件,内容为:

    10

    23

    89

    190

    234

    [完结]

  • 相关阅读:
    Java IO: InputStreamReader和OutputStreamWriter
    Java IO: 序列化与ObjectInputStream、ObjectOutputStream
    Java IO: Buffered和Data
    [Codeforces Round #613 (Div. 2)]
    [算进] 巴士
    [算进] 小木棍
    [算进] 数据备份
    [算进] 双端队列 题解
    [算进] 蚯蚓 题解
    [算进] 赶牛入圈 题解
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/3310281.html
Copyright © 2011-2022 走看看