数组查找

基本查找/顺序查找

#include <stdio.h>

// 基本查找/顺序查找
int orderSearch(int array[], int length, int number);

int main(void) {
  /*
   * 基本查找/顺序查找:
   *     从数组的0索引开始,依次向后查找
   *     如果找到了,返回数据对应的索引
   *     如果没有找到,返回-1
   * */
  int arr[] = {11, 22, 55, 77, 44};
  int len = sizeof(arr) / sizeof(arr[0]);

  int num;
  printf("输入要查找的数:");
  scanf("%d", &num);

  int index = orderSearch(arr, len, num);
  if (index == -1) {
    printf("没有这个数据\n");
  } else {
    printf("arr[%d] = %d\n", index, arr[index]);
  }

  return 0;
}

int orderSearch(int array[], int length, int number) {
  for (int i = 0; i < length; i++) {
    if (number == array[i]) {
      return i;
    }
  }

  return -1;
}

二分查找/折半查找

#include <stdio.h>

// 二分查找/折半查找
int binarySearch(int array[], int length, int number);

int main(void) {
  /*
   * 二分查找/折半查找:
   *     前提条件:数组中的数据必须是有序的
   *     核心逻辑:每次排除一半的查找范围
   * */
  int arr[] = {7, 23, 79, 81, 103, 127, 131, 147};
  int len = sizeof(arr) / sizeof(arr[0]);

  int num;
  printf("输入要查找的数字:");
  scanf("%d", &num);

  int index = binarySearch(arr, len, num);
  if (index == -1) {
    printf("没有这个数据\n");
  } else {
    printf("arr[%d] = %d\n", index, arr[index]);
  }

  return 0;
}

int binarySearch(int array[], int length, int number) {
  int min = 0;
  int max = length - 1;

  while (max >= min) {
    int mid = (max + min) / 2;
    if (number > array[mid]) {
      min = mid + 1;
    } else if (number < array[mid]) {
      max = mid - 1;
    } else {
      return mid;
    }
  }

  return -1;
}

插值查找

#include <stdio.h>

// 插值查找
int interpolationSearch(int array[], int length, int number);

int main(void) {
  /*
   * 插值查找:
   *     要求:数据要有序,且数据分布尽可能的均匀一点
   *     优势:满足要求,效率比二分查找快,否则反而会更慢
   * */
  int arr[] = {7, 23, 79, 81, 103, 127, 131, 147};
  int len = sizeof(arr) / sizeof(arr[0]);

  int num;
  printf("输入要查找的数字:");
  scanf("%d", &num);

  int index = interpolationSearch(arr, len, num);
  if (index == -1) {
    printf("没有这个数据\n");
  } else {
    printf("arr[%d] = %d\n", index, arr[index]);
  }

  return 0;
}

int interpolationSearch(int array[], int length, int number) {
  int min = 0;
  int max = length - 1;

  while (max >= min) {
    int mid =
        min + (max - min) * (number - array[min]) / (array[max] - array[min]);
    if (number > array[mid]) {
      min = mid + 1;
    } else if (number < array[mid]) {
      max = mid - 1;
    } else {
      return mid;
    }
  }

  return -1;
}
posted @ 2026-01-15 10:37  Zhuye_inking  阅读(2)  评论(0)    收藏  举报