练习1:字符移动
编写代码,多个字符从两端移动,向中间汇聚
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <Windows.h>
int main()
{
char arr1[] = "welcome to my blog...";
char arr2[] = "#################";
int left = 0;
int right = strlen(arr1) - 1;
printf("%s\n", arr2);
while (left <= right)
{
Sleep(1000);
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
printf("%s\n", arr2);
}
return 0;
}
- strlen为计算数组长度函数
输出结果:
练习2:二分查找
在一个升序的数组中查找指定的数字n,很容易想到的方法就是遍历数组,但是这种方法效率比较低。二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 1;
int key = 7;//要找的数字
int mid = 0;//记录中间元素的下标
int find = 0;
while (left <= right)
{
mid = left + (right - left) / 2;//避免直接使用 (left + right) / 2 导致整数溢出。
if (arr[mid] > key)
{
right = mid - 1; //目标值小于中间的值,中间及其右边的数均大于目标值,排除
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
find = 1;
break;
}
}
if (1 == find)
printf("找到了,下标是%d\n", mid);
else
printf("找不到\n");
}
获得right标号的方法与上一题类似,需要注意的是都要-1,这是由于数组下标从0开始
输出的结果是:
关于二分查找的更多知识请参考:【二分查找】详细图解_二分查找法流程图-优快云博客