c语言18

160 阅读1分钟

数组作为函数的参数来传递

  1. 在定义数组时,arr表示的是完整的数组。
  2. 在函数内部,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;
}

二分查找

  1. 用于有序数组中查找目标元素
  2. 每次排除一半的查找范围
#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;
}