Hello 算法 1.0.0b5 Golang版1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。 2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。 3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 段代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 。 // === File: iteration.go === /* for 循环 */ func forLoop(n int) int { res := 0 // 循环求和 1, 2, ..., n-1, n for i := 1; i <= n; i++ { res += i } return res }0 码力 | 379 页 | 30.70 MB | 1 年前3
Hello 算法 1.1.0 Go版1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。 2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。 3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 : // === File: iteration.go === /* for 循环 */ func forLoop(n int) int { res := 0 // 循环求和 1, 2, ..., n-1, n for i := 1; i <= n; i++ { res += i } return res }0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。 2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。 3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 段代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 : // === File: iteration.go === /* for 循环 */ func forLoop(n int) int { res := 0 // 循环求和 1, 2, ..., n-1, n for i := 1; i <= n; i++ { res += i } return res }0 码力 | 382 页 | 17.60 MB | 1 年前3
Hello 算法 1.0.0b1 Golang版的字,一般我们会这样做: 1. 打开字典大致一半页数的位置,查看此页的首字母是什么(假设为 ? ); 2. 由于在英文字母表中 ? 在 ? 的后面,因此应排除字典前半部分,查找范围仅剩后半部分; 3. 循环执行步骤 1‑2 ,直到找到拼音首字母为 ? 的页码时终止。 1. 引言 hello‑algo.com 9 Figure 1‑1. 查字典步骤 查字典这个小学生的标配技能,实际上就是大名鼎鼎的 12 // 在某运行平台下 func algorithm(n int) { a := 2 // 1 ns a = a + 1 // 1 ns a = a * 2 // 10 ns // 循环 n 次 for i := 0; i < n; i++ { // 1 ns 2. 复杂度分析 hello‑algo.com 14 fmt.Println(a) // 5 ns } } 但 A 只有 1 个打印操作,算法运行时间不随着 ? 增大而增长。我们称此算法的时间复杂度为「常数阶」。 ‧ 算法 B 中的打印操作需要循环 ? 次,算法运行时间随着 ? 增大成线性增长。此算法的时间复杂度被称为 「线性阶」。 ‧ 算法 C 中的打印操作需要循环 1000000 次,但运行时间仍与输入数据大小 ? 无关。因此 C 的时间复杂 度和 A 相同,仍为「常数阶」。 // 算法 A 时间复杂度:常数阶0 码力 | 190 页 | 14.71 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。 2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。 3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 : // === File: iteration.go === /* for 循环 */ func forLoop(n int) int { res := 0 // 循环求和 1, 2, ..., n-1, n for i := 1; i <= n; i++ { res += i } return res }0 码力 | 384 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0b2 Golang版的字,一般我们会这样做: 1. 打开字典大致一半页数的位置,查看此页的首字母是什么(假设为 ? ); 2. 由于在英文字母表中 ? 在 ? 的后面,因此应排除字典前半部分,查找范围仅剩后半部分; 3. 循环执行步骤 1‑2 ,直到找到拼音首字母为 ? 的页码时终止。 1. 引言 hello‑algo.com 9 Figure 1‑1. 查字典步骤 查字典这个小学生的标配技能,实际上就是大名鼎鼎的 12 // 在某运行平台下 func algorithm(n int) { a := 2 // 1 ns a = a + 1 // 1 ns a = a * 2 // 10 ns // 循环 n 次 for i := 0; i < n; i++ { // 1 ns 2. 复杂度分析 hello‑algo.com 14 fmt.Println(a) // 5 ns } } 但 A 只有 1 个打印操作,算法运行时间不随着 ? 增大而增长。我们称此算法的时间复杂度为「常数阶」。 ‧ 算法 B 中的打印操作需要循环 ? 次,算法运行时间随着 ? 增大成线性增长。此算法的时间复杂度被称为 「线性阶」。 ‧ 算法 C 中的打印操作需要循环 1000000 次,但运行时间仍与输入数据大小 ? 无关。因此 C 的时间复杂 度和 A 相同,仍为「常数阶」。 // 算法 A 时间复杂度:常数阶0 码力 | 202 页 | 15.73 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版2. 在无序区间抽出一张扑克牌,插入至有序区间的正确位置;完成后最左 2 张扑克已经有序。 3. 在无序区间抽出一张扑克牌,插入至有序区间的正确位置;完成后最左 3 张扑克已经有序。 4. 不断循环以上操作,直至所有扑克牌都有序后终止。 以上整理扑克牌的方法本质上就是「插入排序」算法,它在处理小型数据集时非常高效。许多编程语言的排 序库函数中都存在插入排序的身影。 Figure 1‑2. 12 // 在某运行平台下 func algorithm(n int) { a := 2 // 1 ns a = a + 1 // 1 ns a = a * 2 // 10 ns // 循环 n 次 for i := 0; i < n; i++ { // 1 ns fmt.Println(a) // 5 ns } } 2. 复杂度 hello‑algo.com 15 然而实 只有 1 个打印操作,算法运行时间不随着 ? 增大而增长。我们称此算法的时间复杂度为「常数 阶」。 ‧ 算法 B 中的打印操作需要循环 ? 次,算法运行时间随着 ? 增大呈线性增长。此算法的时间复杂度被称 为「线性阶」。 ‧ 算法 C 中的打印操作需要循环 1000000 次,但运行时间仍与输入数据大小 ? 无关。因此 C 的时间复杂 度和 A 相同,仍为「常数阶」。 // 算法 A 时间复杂度:常数阶0 码力 | 347 页 | 27.40 MB | 1 年前3
Go 入门指南(The way to Go)必须放在第一行。 拼接的简写形式 += 也可以用于字符串: s := "hel" + "lo," s += "world!" fmt.Println(s) //输出 “hello, world!” 在循环中使用加号 + 拼接字符串并不是最高效的做法,更好的办法是使用函数 strings.Join() (第 4.7.10 节),有没有更好地办法了?有!使用字节缓冲( bytes.Buffer )拼接更加给力(第 章,我们会讲到通过将字符串看作是字节(byte)的切片(slice)来实现对其标准索引法的操作。 会在第 5.4.1 节中讲到的 for 循环只会根据索引返回字符串中的纯字节,而在第 5.4.4 节(以及第 7.6.1 节 的示例)将会展示如何使用 for-range 循环来实现对 Unicode 字符串的迭代操作。在下一节,我们会学 习到许多有关字符串操作的函数和方法,同时 fmt 包中的 fmt.Sprint(x) slice。 strings.Split(s, sep) 用于自定义分割符号来对指定字符串进行分割,同样返回 slice。 因为这 2 个函数都会返回 slice,所以习惯使用 for-range 循环来对其进行处理(第 7.3 节)。 4.7.10 拼接 slice 到字符串 Join 用于将元素类型为 string 的 slice 使用分割符号来拼接组成一个字符串: Strings.Join(sl0 码力 | 380 页 | 2.97 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a和易于理解。 在流行高级编程语言中,一个操作通常是通过函数(function)调用或者使用 操作符(operator)运算来完成的。 大多数高级编程语言都支持一些条件和循 环控制语句。 这些条件和循环控制语句可以看作是特殊的操作。 它们的语法 接近于人类语言,因此一个人写的代码很容易被其他人理解。 在大多数高级编程语言中,数据通常被抽象为各种类型(type)和值 (value)。 一个类型可 ds int) (int, int) { 14 | // 声明了两个变量(类型都为int,初始值都为0) 15 | var a, b int 16 | // 一个for循环代码块 17 | for i := 0; i < numRands; i++ { 18 | // 一个if-else条件控制代码块 19 | if rand 地,此文列出了所有的简单语句类型。 在Go代码中,各种流程控制代码块中 的某些部分必须为简单语句,某些部分必须为表达式。 StatRandomNumbers函数的声明体中使用了两个流程控制代码块。 其中一个是 for循环代码块,它内嵌了另外一个代码块。 另外一个代码块是一个if-else 条件控制代码块。 请阅读基本流程控制语法(第12章)以获取更多关于流程 控制代码块的信息。 更多的特殊的流程控制代码块将在以后的其它文章中介0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a编程变得直观和 易于理解。 在流行高级编程语言中,一个操作通常是通过函数(function)调用或者使用操 作符(operator)运算来完成的。 大多数高级编程语言都支持一些条件和循环 控制语句。 这些条件和循环控制语句可以看作是特殊的操作。 它们的语法接近 于人类语言,因此一个人写的代码很容易被其他人理解。 在 大 多 数 高 级 编 程 语 言 中 , 数 据 通 常 被 抽 象 为 各 StatRandomNumbers(numRands int) (int, int) { 14. // 声明了两个变量(类型都为int,初始值都为0) 15. var a, b int 16. // 一个for循环代码块 17. for i := 0; i < numRands; i++ { 18. // 一个if-else条件控制代码块 19. if rand.Intn(MaxRand) 地,此文列出了所有的简单语句类型。 在Go代码中,各种流程控制代码块中的 某些部分必须为简单语句,某些部分必须为表达式。 StatRandomNumbers函数的声明体中使用了两个流程控制代码块。 其中一个是 for循环代码块,它内嵌了另外一个代码块。 另外一个代码块是一个if-else条 件控制代码块。 请阅读基本流程控制语法(第12章)以获取更多关于流程控制 代码块的信息。 更多的特殊的流程控制代码块将在以后的其它文章中介绍。0 码力 | 608 页 | 1.08 MB | 1 年前3
共 30 条
- 1
- 2
- 3













