数组作为函数的参数来传递
- 在定义数组时,arr表示的是完整的数组。
- 在函数内部,arr只是一个变量名,用来记录数组的首地址。
顺序查找
#include <stdio.h>
int find(int arr[], int len, int target){
for(int i = 0; i < len; i++){
if(arr[i] == target){
return i;
}
}
return -1;
}
int main(){
int arr[] = {5,1,6,7,1,2,3};
int len = sizeof(arr)/sizeof(arr[0]);
int target = 1;
int index = find(arr, len, target);
printf("index = %d\n", index);
return 0;
}
二分查找
- 用于有序数组中查找目标元素
- 每次排除一半的查找范围
#include <stdio.h>
int find(int arr[], int min, int max, int target){
while(max >= min){
int mid = (min + max)/2;
if(arr[mid] == target){
return mid;
}else if(arr[mid] > target){
max = mid - 1;
}else if(arr[mid]< target){
min = mid + 1;
}
}
return -1;
}
int main(){
int arr[] = {1,2,3,4,5,6,7,8,9,11};
int len = sizeof(arr)/sizeof(arr[0]);
int target =10;
int index = find(arr,0 , len-1 , target);
printf("index = %d\n", index);
return 0;
}
百分比
int mid = min + (target - arr[min])/(arr[max] - arr[min]) * (max - min); 其他与上同
20个不相同随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int find(int arr[], int len, int target){
for(int i = 0; i < len; i++){
if(arr[i] == target){
return i;
}
}
return -1;
}
int main(){
srand(time(NULL));
int arr[20];
int counter = 0;
while(counter < 20){
int key = rand() % 100+1;
if(find(arr, counter, key) == -1){
arr[counter] = key;
}
counter++;
}
for(int i = 0; i < 20; i++){
printf("%d ", arr[i]);
}
return 0;
}
手搓2个函数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int find(int arr[], int len, int target){
for(int i = 0; i < len; i++){
if(arr[i] == target){
return i;
}
}
return -1;
}
void getArr(int arr[], int len){
srand(time(NULL));
int counter = 0;
while(counter < 20){
int key = rand() % 100+1;
if(find(arr, counter, key) == -1){
arr[counter] = key;
counter++;
}else{
printf("key: %d already exists\n", key);
}
}
}
int main(){
int arr[20];
getArr(arr, 20);
for(int i = 0; i < 20; i++){
printf("%d ", arr[i]);
}
return 0;
}