数组不仅是一种数据存储方式,也是许多算法实现的基础。
1. 多个字符从两端移动,向中间汇聚
在字符处理方面,可以利用数组存储字符串中的字符,并通过修改数组中不同位置的元素,实现字符逐步显示、替换或移动等效果。
c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
char arr1[] = "hello world";
char arr2[] = "***********";
int low = 0;
int high = strlen(arr1) - 1;
printf("%s\n", arr2);
while (low <= high) {
Sleep(1000);
arr2[low] = arr1[low];
arr2[high] = arr1[high];
low++;
high--;
system("cls");
printf("%s\n", arr2);
}
return 0;
}

2. 二分查找
在查找算法方面,数组可以用于实现顺序查找和二分查找。顺序查找适用于一般数组,但效率较低;二分查找适用于有序数组,其基本思想是每次取中间位置的元素与目标值比较,从而不断缩小查找范围。
c
#include<stdio.h>
int BinarySearch(int n, int arr[], int size) {
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (n == arr[mid]) {
return mid;
}
else if (n < arr[mid]) {
high = mid - 1;
}
else {
low = mid + 1;
}
}
if (low > high) {
return -1;
}
}
int main() {
int arr[] = { 10,20,25,30,35,55,40,86,99 };
int size = sizeof(arr) / sizeof(int);
int n = 0;
scanf("%d", &n);
int get = BinarySearch(n, arr, size);
if (get == -1) {
printf("Not Found");
}
else {
printf("arr[%d]=%d", get, n);
}
return 0;
}


二分查找的效率明显高于顺序查找。对于长度为 n 的有序数组,顺序查找的时间复杂度是 O(n),而二分查找的时间复杂度是 O(log n)。因此,二分查找是数组应用中非常经典且重要的算法思想。