From ee93cd1d0fe36f005de7313aa69c3e821b9bc4ac Mon Sep 17 00:00:00 2001 From: Slone <50995948+aa274325721@users.noreply.github.com> Date: Mon, 5 Dec 2022 13:36:51 +0800 Subject: [PATCH 1/7] Update binary_search.md --- docs/chapter_searching/binary_search.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/chapter_searching/binary_search.md b/docs/chapter_searching/binary_search.md index d0e4a6db..5000b66a 100644 --- a/docs/chapter_searching/binary_search.md +++ b/docs/chapter_searching/binary_search.md @@ -220,7 +220,24 @@ $$ === "Go" ```go title="binary_search.go" - + /* 二分查找(左闭右开) */ + func binarySearch1(nums []int, target int) int { + // 初始化左闭右开 [0, n) ,即 i, j 分别指向数组首元素、尾元素+1 + i, j := 0, len(nums) + // 循环,当搜索区间为空时跳出(当 i = j 时为空) + for i < j { + m := (i + j) / 2 // 计算中点索引 m + if nums[m] < target { // 此情况说明 target 在区间 [m+1, j) 中 + i = m + 1 + } else if nums[m] > target { // 此情况说明 target 在区间 [i, m) 中 + j = m + } else { // 找到目标元素,返回其索引 + return m + } + } + // 未找到目标元素,返回 -1 + return -1 + } ``` === "JavaScript" From b580b29b666e2347fcac4eb4cf54eb16b63ef9a3 Mon Sep 17 00:00:00 2001 From: Slone <50995948+Slone123c@users.noreply.github.com> Date: Mon, 5 Dec 2022 19:08:24 +0800 Subject: [PATCH 2/7] Update binary_search.md Left closed right closed interval bsearch using go --- docs/chapter_searching/binary_search.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/chapter_searching/binary_search.md b/docs/chapter_searching/binary_search.md index 5000b66a..04dbba8a 100644 --- a/docs/chapter_searching/binary_search.md +++ b/docs/chapter_searching/binary_search.md @@ -123,7 +123,24 @@ $$ === "Go" ```go title="binary_search.go" - + /* 二分查找(左闭右开) */ + func binarySearch1(nums []int, target int) int { + // 初始化左闭右开 [0, n) ,即 i, j 分别指向数组首元素、尾元素+1 + i, j := 0, len(nums) + // 循环,当搜索区间为空时跳出(当 i = j 时为空) + for i < j { + m := (i + j) / 2 // 计算中点索引 m + if nums[m] < target { // 此情况说明 target 在区间 [m+1, j) 中 + i = m + 1 + } else if nums[m] > target { // 此情况说明 target 在区间 [i, m) 中 + j = m + } else { // 找到目标元素,返回其索引 + return m + } + } + // 未找到目标元素,返回 -1 + return -1 + } ``` === "JavaScript" From 75ffa5180eb8deda585fc73d55de985f1b37f661 Mon Sep 17 00:00:00 2001 From: Slone <50995948+Slone123c@users.noreply.github.com> Date: Mon, 5 Dec 2022 19:14:50 +0800 Subject: [PATCH 3/7] Update binary_search.md Edited number out of bound topic --- docs/chapter_searching/binary_search.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/chapter_searching/binary_search.md b/docs/chapter_searching/binary_search.md index 04dbba8a..0a407ff9 100644 --- a/docs/chapter_searching/binary_search.md +++ b/docs/chapter_searching/binary_search.md @@ -328,7 +328,10 @@ $$ === "Go" ```go title="" - + // (i + j) 有可能超出 int 的取值范围 + m := (i + j) / 2 + // 更换为此写法则不会越界 + m := i + (j - i) / 2 ``` === "JavaScript" From 829e13494ebab43166e4f8e8fa199754522875b1 Mon Sep 17 00:00:00 2001 From: Slone <50995948+Slone123c@users.noreply.github.com> Date: Mon, 5 Dec 2022 20:39:42 +0800 Subject: [PATCH 4/7] binary_search.go and binary_search_test uploaded --- codes/go/chapter_searching/binary_search.go | 43 +++++++++++++++++++ .../chapter_searching/binary_search_test.go | 24 +++++++++++ 2 files changed, 67 insertions(+) create mode 100644 codes/go/chapter_searching/binary_search.go create mode 100644 codes/go/chapter_searching/binary_search_test.go diff --git a/codes/go/chapter_searching/binary_search.go b/codes/go/chapter_searching/binary_search.go new file mode 100644 index 00000000..437f79a9 --- /dev/null +++ b/codes/go/chapter_searching/binary_search.go @@ -0,0 +1,43 @@ +// File: binary_search.go +// Created Time: 2022-12-5 +// Author: Slone123c (274325721@qq.com) + +package chapter_searching + +/* 二分查找(双闭区间) */ +func binarySearch(nums []int, target int) int { + // 初始化双闭区间 [0, n-1] ,即 i, j 分别指向数组首元素、尾元素 + i, j := 0, len(nums)-1 + // 循环,当搜索区间为空时跳出(当 i > j 时为空) + for i <= j { + m := (i + j) / 2 // 计算中点索引 m + if nums[m] < target { // 此情况说明 target 在区间 [m+1, j] 中 + i = m + 1 + } else if nums[m] > target { // 此情况说明 target 在区间 [i, m-1] 中 + j = m - 1 + } else { // 找到目标元素,返回其索引 + return m + } + } + // 未找到目标元素,返回 -1 + return -1 +} + +/* 二分查找(左闭右开) */ +func binarySearch1(nums []int, target int) int { + // 初始化左闭右开 [0, n) ,即 i, j 分别指向数组首元素、尾元素+1 + i, j := 0, len(nums) + // 循环,当搜索区间为空时跳出(当 i = j 时为空) + for i < j { + m := (i + j) / 2 // 计算中点索引 m + if nums[m] < target { // 此情况说明 target 在区间 [m+1, j) 中 + i = m + 1 + } else if nums[m] > target { // 此情况说明 target 在区间 [i, m) 中 + j = m + } else { // 找到目标元素,返回其索引 + return m + } + } + // 未找到目标元素,返回 -1 + return -1 +} diff --git a/codes/go/chapter_searching/binary_search_test.go b/codes/go/chapter_searching/binary_search_test.go new file mode 100644 index 00000000..341b93e1 --- /dev/null +++ b/codes/go/chapter_searching/binary_search_test.go @@ -0,0 +1,24 @@ +// File: binary_search_test.go +// Created Time: 2022-11-25 +// Author: Slone123c (274325721@qq.com) + +package chapter_searching + +import ( + "fmt" + "testing" +) + +func TestBinarySearch(t *testing.T) { + var ( + target = 3 + nums = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} + expected = 2 + ) + // 在数组中执行二分查找 + actual := binarySearch(nums, target) + fmt.Println("目标元素 3 的索引 =", actual) + if actual != expected { + t.Errorf("目标元素 3 的索引 = %d, 应该为 %d", actual, expected) + } +} From 27e993e6dfd18db551d28cb4c84cc924f9229a71 Mon Sep 17 00:00:00 2001 From: Slone <50995948+Slone123c@users.noreply.github.com> Date: Mon, 5 Dec 2022 20:45:46 +0800 Subject: [PATCH 5/7] binary_search_test_ edited time --- codes/go/chapter_searching/binary_search_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codes/go/chapter_searching/binary_search_test.go b/codes/go/chapter_searching/binary_search_test.go index 341b93e1..aa0ff301 100644 --- a/codes/go/chapter_searching/binary_search_test.go +++ b/codes/go/chapter_searching/binary_search_test.go @@ -1,5 +1,5 @@ // File: binary_search_test.go -// Created Time: 2022-11-25 +// Created Time: 2022-12-5 // Author: Slone123c (274325721@qq.com) package chapter_searching From bb00bb862045062834807dfa7f3475acae5633a2 Mon Sep 17 00:00:00 2001 From: Yudong Jin Date: Mon, 5 Dec 2022 22:32:08 +0800 Subject: [PATCH 6/7] Update binary_search.go --- codes/go/chapter_searching/binary_search.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codes/go/chapter_searching/binary_search.go b/codes/go/chapter_searching/binary_search.go index 437f79a9..cbaa8516 100644 --- a/codes/go/chapter_searching/binary_search.go +++ b/codes/go/chapter_searching/binary_search.go @@ -1,5 +1,5 @@ // File: binary_search.go -// Created Time: 2022-12-5 +// Created Time: 2022-12-05 // Author: Slone123c (274325721@qq.com) package chapter_searching From 1f24a7c75d2855d6f943d952d191720510f05fff Mon Sep 17 00:00:00 2001 From: Yudong Jin Date: Mon, 5 Dec 2022 22:32:56 +0800 Subject: [PATCH 7/7] Update binary_search_test.go --- codes/go/chapter_searching/binary_search_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codes/go/chapter_searching/binary_search_test.go b/codes/go/chapter_searching/binary_search_test.go index aa0ff301..3dada959 100644 --- a/codes/go/chapter_searching/binary_search_test.go +++ b/codes/go/chapter_searching/binary_search_test.go @@ -1,5 +1,5 @@ // File: binary_search_test.go -// Created Time: 2022-12-5 +// Created Time: 2022-12-05 // Author: Slone123c (274325721@qq.com) package chapter_searching