用C语言编写的二分查找算法:【希望自己能记住】
#include <stdio.h>
void sort(int *arr, int n);
int erfen(int *arr, int s, int n);
int main()
{
/*
//1.有序的
int arr[] = {10, 23, 65, 86, 95, 150};
*/
//2.无序的
int arr[] = {5, 65, 23, 55, 98, 0};
int size = sizeof(arr)/sizeof(int);
printf("size is %d\n", size);
sort(arr, size);
for (int i=0; i<size; i++) {
printf("%d\n", arr[i]);
}
int res = erfen(arr, size, 0);
if (res == -1) {
printf("number isn't exiting!\n");
}else{
printf("number exiting, this is %d\n", res);
}
return 0;
}
//二分
int erfen(int *arr, int s, int n)
{
int r = s-1;
int l = 0;
while (l<=r) {
int mid = (r+l)/2;
if (n > arr[mid]) {
l = mid+1;
} else if (n < arr[mid]) {
r = mid-1;
}else{
return mid;
}
}
return -1;
}
//冒泡
void sort(int *arr, int s)
{
int temp = 0;
for (int i=s-1; i>=0; i--) {
for (int j=0; j<i; j++) {
if(arr[j]>arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}