**
download:算法训练营
Q:课程是用什么语言教学的?
算法训练营是用 Java 和 Python 教学,不过课程重要的是思路的讲解,不要求必须掌握 Java 和 Python,以往学员中有 C++、PHP、甚至是前端开发工程师,也完全可以学习。
Q:每天需要投入多少时间来学习?
每周需要投入 8-12 小时来观看课程视频,并完成当周作业。
**
**
哪些人适合报名算法训练营?
近期有大厂跳槽计划,需快速掌握算法
想进入大数据等热门领域,算法是短板
多次自学算法,但是始终坚持不下去
明白算法知识原理,做题却找不到最优解
无数次下定决心刷题,却不到 3 天就放弃
清楚算法的重要性,但找不到学习方法
**
sorter.go:
//主程序// 主程序的package必需是mainpackage main//import 不用管,IDE会自动增加import ( "flag" "os" "fmt" "bufio" "io" "strconv" "time" "sorter/algorithms/qsort" "sorter/algorithms/bubblesort")flag包快迅解析命令行参数的var infile *string = flag.String("i", "infile", "File contains values for sorting")var outfile *string = flag.String("o", "outfile", "File to receive sorted values")var algorithm *string = flag.String("a", "qsort", "Sort algorithm")func readValues(infile string)(values []int, err error) { file, err := os.Open(infile) if err != nil { fmt.Println("Failed to open the input file ", infile) return } 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 unexpected.") return } str := string(line) // 转换字符数组为字符串 value, err1 := strconv.Atoi(str) if err1 != nil { err = err1 return } values = append(values, value) } return}func writeValues(values []int, outfile string) error { file, err := os.Create(outfile) if err != nil { fmt.Println("Failed to create the output file ", outfile) return err } defer file.Close() for _, value := range values { str := strconv.Itoa(value) file.WriteString(str + "\n") } return nil}//程序入口func main() { //flag包快迅解析命令行参数的 flag.Parse() if infile != nil { fmt.Println("infile =", *infile, "outfile =", *outfile, "algorithm =", *algorithm) } values, err := readValues(*infile) if err == nil { t1 := time.Now() switch *algorithm { case "qsort": qsort.QuickSort(values) case "bubblesort": bubblesort.BubbleSort(values) default: fmt.Println("Sorting algorithm", *algorithm, "is either unknown or unsupported.") } t2 := time.Now() fmt.Println("The sorting process costs", t2.Sub(t1), "to complete.") writeValues(values, *outfile) } else { fmt.Println(err) }}
qsort.go:
// qsort_test.gopackage qsortimport "testing"func TestQuickSort1(t *testing.T) { values := []int{5, 4, 3, 2, 1} QuickSort(values) if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 4 || values[4] !=5 { t.Error("QuickSort() failed. Got", values, "Expected 1 2 3 4 5") }}func TestQuickSort2(t *testing.T) { values := []int{5, 5, 3, 2, 1} QuickSort(values) if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 5 || values[4] !=5 { t.Error("QuickSort() failed. Got", values, "Expected 1 2 3 5 5") }}func TestQuickSort3(t *testing.T) { values := []int{5} QuickSort(values) if values[0] != 5 { t.Error("QuickSort() failed. Got", values, "Expected 5") }}
bubblesort.go:
// bubblesort.gopackage bubblesortfunc BubbleSort(values []int) { flag := true for i := 0; i <len(values) - 1; 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 } // end if } // end for j = ... if flag == true { break } } // end for i = ...}
qsort_test.go:
// qsort_test.gopackage qsortimport "testing"func TestQuickSort1(t *testing.T) { values := []int{5, 4, 3, 2, 1} QuickSort(values) if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 4 || values[4] !=5 { t.Error("QuickSort() failed. Got", values, "Expected 1 2 3 4 5") }}func TestQuickSort2(t *testing.T) { values := []int{5, 5, 3, 2, 1} QuickSort(values) if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 5 || values[4] !=5 { t.Error("QuickSort() failed. Got", values, "Expected 1 2 3 5 5") }}func TestQuickSort3(t *testing.T) { values := []int{5} QuickSort(values) if values[0] != 5 { t.Error("QuickSort() failed. Got", values, "Expected 5") }}
bubble_test.go:
// bubble_test.gopackage bubblesortimport "testing"func TestBubbleSort1(t *testing.T) { values := []int{5, 4, 3, 2, 1} BubbleSort(values) if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 4 || values[4] !=5 { t.Error("BubbleSort() failed. Got", values, "Expected 1 2 3 4 5") }}func TestBubbleSort2(t *testing.T) { values := []int{5, 5, 3, 2, 1} BubbleSort(values) if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 5 || values[4] !=5 { t.Error("BubbleSort() failed. Got", values, "Expected 1 2 3 5 5") }}func TestBubbleSort3(t *testing.T) { values := []int{5} BubbleSort(values) if values[0] != 5 { t.Error("BubbleSort() failed. Got", values, "Expected 5") }}
运转前准备:
准备“unsorted.dat”文件。
运转过程:
go build sorter/slgorithms/qsort
go build sorter/algorithms/bubblesort
go test sorter/algorithms/qsort
go test sorter/algorithms/bubblesort
go install sorter/algorithms/qsort
go install sorter/algorithms/bubblesort
go build sorter
go install sorter
运转结果:
输出文件:sorted.dat