算法训练营

142 阅读3分钟

**

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