一、二分查找
#include <stdio.h>
int binarySearch(int* nums, int num, int length) {
// 定义两个变量,一个存储左边界,一个存储右边界;最开始左边界为0,右边界为数组长度减一
int i = 0;
int j = length - 1;
while (i <= j) {
// 避免越界
int mid = i + (j - i) / 2;
// 使用中间位置的值与查找的值进行比较
if (num == *(nums + mid)) {
// 找到了
return mid;
}
else if (num > *(nums + mid)) {
// 将中间值加一替换左边界
i = mid + 1;
}
else {
// 将中间值减一替换右边界
j = mid - 1;
}
}
return -1;
}
int main() {
// 在一个升序数组中查找指定的数字
int nums[] = { 1,2,5,8,10,11,15,16,19,25,34,46,52 };
// 求数组的长度
int length = sizeof(nums) / sizeof(nums[0]);
// 定义一个变量存储查找的数
int num;
printf("请输入要查找的数:");
scanf("%d", &num);
// 定义一个变量存储所要查找数的索引
int index = binarySearch(nums, num, length);
if (index == -1) {
printf("对不起,该数组中不存在该元素");
}
else {
printf("%d的索引为%d", num, index);
}
return 0;
}
二、冒泡查找
void buSort(int* num,int length)
{
//3,14,13,15,6,7,11,8
int i,j,cnt;
for(i = length-1;i > 0;i--)
{
for(j = 0;j < i;j++)
{
if(num[j] > num[j+1])
{
cnt = num[j];
num[j] = num[j+1];
num[j+1] = cnt;
}
}
}
}
三、插入排序
void inSort(int* num,int length)
{
int i,j;
for(i = 1;i < length;i++)
{
int val = num[i];
for(j = i - 1;j >=0 && num[j] > val;j--)
{
num[j+1] = num[j];
}
num[j+1] = val;
}
}
四、选择排序
void seSort(int* num,int length)
{
int cnt,min;
int i,j;
for(i = 0;i < length-1;i++)
{
min = i;
for(j = i+1;j < length;j++)
{
if(num[j]<num[min])
min = j;
}
cnt = num[min];
num[min] = num[i];
num[i] = cnt;
}
}