冒泡排序:就是相邻两个数进行比较,如果a>b(或者a<b)则交换值,每次把一个最大(或者最小)的值往后推。
二分查找:每次取头和尾的中间下标的值a与目标值b进行比较,如果a>b表示目标值b在中间下标前面,把头指向中间下标的前一位;如果a<b表示目标值b在是中间下标后面,把尾指向中间下标的后一位;如果a==b则返回中间下标。查找失败返回-1。
1.随机初始化一个指定长度的数组。
2.对数组进行排序。
3.输入一个值,并查找该值在数组中的下标。
#include
#include
#include
// 冒泡排序
void sort(int arr[], int length){
for (int i = 0; i < length -1; ++i)
{
for (int j = 0; j < length - 1 - i;++j) //每次把一个最大的值往后推
{
if (arr[j]>arr[j+1])
{
// 变换两个变量的值
arr[j] = arr[j] ^ arr[j+1];
arr[j+1] = arr[j] ^ arr[j+1];
arr[j] = arr[j] ^ arr[j+1];
}
}
}
}
// 二分查找法(注意:二分查找法只能在有序的数组中使用)
int search(int arr[], int length, int target){
int head = 0;
int tail = length -1;
for (int count = 1,center = 0;head <= tail; ++count)
{
printf("第%d次迭代\n",count);
center = (head+tail)/2;
if (arr[center] < target)
{
head = center + 1; // 把头移到中间下标的后一个位置
}else if(arr[center] > target){
tail = center - 1; // 把尾移到中间下标的前一个位置
}else{
return center;
}
}
return -1;
}
void printArr(int arr[], int length){
for (int i = 0; i