-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathlinear_search.c
More file actions
66 lines (55 loc) · 1.57 KB
/
linear_search.c
File metadata and controls
66 lines (55 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>
/*
* 线性搜索(Linear Search)- C 版本
*
* 从头到尾依次比较数组中的每一个元素,找到目标值的下标。
* 时间复杂度:O(n)
* 空间复杂度:O(1)
*/
// 查找第一个等于 target 的下标,未找到返回 -1
int linear_search(const int *arr, int n, int target) {
for (int i = 0; i < n; i++) {
if (arr[i] == target) {
return i;
}
}
return -1;
}
// 查找所有等于 target 的下标,结果存入 indices,返回找到的个数
int linear_search_all(const int *arr, int n, int target, int *indices) {
int count = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == target) {
indices[count++] = i;
}
}
return count;
}
int main(void) {
printf("========== Linear Search (C) ==========\n");
int arr[] = {5, 2, 8, 1, 9, 3, 7};
int n = (int)(sizeof(arr) / sizeof(arr[0]));
printf("数组: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
int idx = linear_search(arr, n, 8);
printf("查找 8 -> %d\n", idx);
idx = linear_search(arr, n, 10);
printf("查找 10 -> %d\n", idx);
int arr2[] = {1, 2, 3, 2, 4, 2};
int m = (int)(sizeof(arr2) / sizeof(arr2[0]));
int indices[6];
int count = linear_search_all(arr2, m, 2, indices);
printf("数组2: ");
for (int i = 0; i < m; i++) {
printf("%d ", arr2[i]);
}
printf("\n查找所有 2 -> ");
for (int i = 0; i < count; i++) {
printf("%d ", indices[i]);
}
printf("\n");
return 0;
}