按书上的例子,写了个长的go代码

用于实现快速排序和冒泡排序的东东。

包括了蛮多东西的实现,输入输出,字符串处理等。。。。

bubblesort.go

package bubblesort

func 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
			}
		}

		if flag == true {
			break
		}
	}
}

  qsort.go

package qsort

func quickSort(values []int, left, right int) {
	temp := values[left]
	p := left
	i, j := left, right

	for i <= j {
		for j >= p && values[j] >= temp {
			j--
		}
		if j >= p {
			values[p] = values[j]
			p = j
		}

		if values[i] <= temp && i <= p {
			i++
		}

		if i <= p {
			values[p] = values[i]
			p = i
		}
	}
	values[p] = temp
	if p-left > 1 {
		quickSort(values, left, p-1)
	}
	if right-p > 1 {
		quickSort(values, p+1, right)
	}
}

func QuickSort(values []int) {
	quickSort(values, 0, len(values)-1)
}

  qsort_test.go

package qsort

import (
	"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")
	}
}

  sorter.go

package main

import (
	"bufio"
	"flag"
	"fmt"
	"helloworld/algorithms/bubblesort"
	"helloworld/algorithms/qsort"
	"io"
	"os"
	"strconv"
	"time"
)

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 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.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("algorithm is unknows or un supported.")
		}
		t2 := time.Now()
		fmt.Println("The sorting process costs ", t2.Sub(t1), " to complete.")
		writeValues(values, *outfile)
	} else {
		fmt.Println(err)
	}
}

  

时间: 2024-09-10 01:28:00

按书上的例子,写了个长的go代码的相关文章

新手怎么思考c语言书上的例子

问题描述 新手怎么思考c语言书上的例子 c语言新手一枚,自学中,现在很不熟练. 面对书上稍微复杂一点的例子, 脑子里就一团浆糊.所以昨天开始就试着在敲例子前画程序流程图.然后再敲,请问这种方法是对的吗?如果不是或者有什么要补充的麻烦给我讲一下,谢谢啦! 解决方案 最好找一个懂程序的人教你下.看下人家是怎么写程序的. 我见过一些初学者遇到的困难,是因为他们完全是根据书本上写好的程序在模仿.但是这有一个问题,就是看不到程序从无到有的过程. 好比根据烧好的菜去研究烹饪或者根据画好的画去学习素描,这都是

书上的例子,麻烦解释下

问题描述 import java.awt.*;import java.awt.event.*;import java.util.*;import java.awt.geom.*;import javax.swing.*;public class MouseTest{ public static void main(String args[]){ MouseFrame mf = new MouseFrame(); mf.setDefaultCloseOperation(JFrame.EXIT_ON

java小白求解,下面的代码是按照书上的例子抄下来的,不明白为什么报错。

问题描述 java小白求解,下面的代码是按照书上的例子抄下来的,不明白为什么报错. 代码如下:主要问题就是报错的地方:已经用注释吧报错贴上:还看不懂这个报错,求大神帮助:package Calendar; import java.util.Scanner; public class Calendar { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println(

Eclipse控制台输出编号:1姓名:王丹性别:女部门:质量部怎么弄啊!书上的例我感觉能看懂啊 为什么一到自己打就无从下手了呢,感觉什么都不会了呢?

问题描述 Eclipse控制台输出编号:1姓名:王丹性别:女部门:质量部怎么弄啊!书上的例我感觉能看懂啊为什么一到自己打就无从下手了呢,感觉什么都不会了呢? 解决方案 解决方案二:publicclassName{publicstaticvoidmain(String[]args){System.out.println("编号:1");System.out.println("姓名:王丹");System.out.println("性别:女");Sy

listview-ListView 的问题,按照书上例子,仿写了一个,结果出问题了,请大家看看到底哪里出错了啊

问题描述 ListView 的问题,按照书上例子,仿写了一个,结果出问题了,请大家看看到底哪里出错了啊 先是有两个布局文件,一个是关于ListView控件的,另一个是我自己定的线性布局,实现的是一个字符旁边先是一个图样. xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&

最近在看郭霖的第一行代码,写酷欧天气时,发现书上给的中国天气网提供的省市县api失效

问题描述 最近在看郭霖的第一行代码,写酷欧天气时,发现书上给的中国天气网提供的省市县api失效 最近在看郭霖的第一行代码,写酷欧天气时,发现书上给的中国天气网提供的省市县api失效请问新的省市县的api地址多少啊?或者有更好的API借口,求大神提供,感激不尽! 解决方案 天气api 解决方案二: 现在中国天气网有api,现在是免费的.或者用爬虫抓取天气也可以. 解决方案三: 推荐你用showapi

C#新手,看到书上一个 关于foreach的例子,无法运行

问题描述 C#新手,看到书上一个 关于foreach的例子,无法运行 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace foreachApp{ class Program { public static void Main() { IDictionary environment = Environment.GetEnvironmentVariables(); Co

printf-哪里错了哪里错了我是按照书上写的

问题描述 哪里错了哪里错了我是按照书上写的 main(){int shuzu[5]={14287};int ij;for(i=0;ifor(j=1;jif(shuzu[j-1]>shuzu[j]){int a=shuzu[j-1];shuzu[j-1]=shuzu[j];shuzu[j]=shuzu[j-1];}for(i=0;i<5;i++)printf(""%d ""shuzu[i]):}} 解决方案 int main(){int shuzu[5]=

源代码-按书上写了一段java捕获异常的代码,不知道问题出在哪里

问题描述 按书上写了一段java捕获异常的代码,不知道问题出在哪里 源代码如下: package com.Sixping.Ncre; public class Rethrow { public static void rt() throws Exception {//定义方法,抛出Exception类的异常 System.out.println("old exception in rt()"); throw new Exception("thrown from rt()&qu