/***********************************************************************
如果待查找的元素在数组中有多个,则返回其中任意一个(第一个或者最后一个)
************************************************************************/
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
void TraversalArray(int array[], int len)
{
assert(array != NULL);
assert(len >= 0);
unsigned index = -1;
for(index = 0; index < len; index++)
{
printf("%3d", array[index]);
}
printf("\n");
}
int Is_Sort(int array[], int low, int high)
{
int i = -1;
for(i = low; i < high-1; i++)
{
if(array[i] > array[i+1])
{
return 0;
}
}
return 1;
}
int BinarySearch(int array[], int low, int high, int key)
{
if(low > high)
{
return -1;
}
assert(array != NULL);
assert(Is_Sort(array, low, high));
if(key == array[low])
{
return low;//打开这个 if(),则找到第一个要找的元素
}
/*
if(key == array[high])
{
return high;//打开这里的 if(),则找到最后一个要查找的元素
}
*/
int mid = (low + high)/2;
if(key == array[mid])
{
return BinarySearch(array, low, mid, key);/*递归继续查找特殊位置的元素*/
}
else if(key < array[mid])
{
return BinarySearch(array, low, mid-1, key);/*在小的那一段继续折半查找*/
}
else
{
return BinarySearch(array, mid+1, high, key);/*在大的那一半继续折半查找*/
}
}
int main(void)
{
int array[] = {0, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9};
TraversalArray(array, sizeof(array)/sizeof(array[0]));
int index = BinarySearch(array, 0, sizeof(array)/sizeof(array[0])-1, 2);
printf("index = %d \n", index);
return 0;
}
如果待查找的元素在数组中有多个,则返回其中任意一个(第一个或者最后一个)
************************************************************************/
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
void TraversalArray(int array[], int len)
{
assert(array != NULL);
assert(len >= 0);
unsigned index = -1;
for(index = 0; index < len; index++)
{
printf("%3d", array[index]);
}
printf("\n");
}
int Is_Sort(int array[], int low, int high)
{
int i = -1;
for(i = low; i < high-1; i++)
{
if(array[i] > array[i+1])
{
return 0;
}
}
return 1;
}
int BinarySearch(int array[], int low, int high, int key)
{
if(low > high)
{
return -1;
}
assert(array != NULL);
assert(Is_Sort(array, low, high));
if(key == array[low])
{
return low;//打开这个 if(),则找到第一个要找的元素
}
/*
if(key == array[high])
{
return high;//打开这里的 if(),则找到最后一个要查找的元素
}
*/
int mid = (low + high)/2;
if(key == array[mid])
{
return BinarySearch(array, low, mid, key);/*递归继续查找特殊位置的元素*/
}
else if(key < array[mid])
{
return BinarySearch(array, low, mid-1, key);/*在小的那一段继续折半查找*/
}
else
{
return BinarySearch(array, mid+1, high, key);/*在大的那一半继续折半查找*/
}
}
int main(void)
{
int array[] = {0, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9};
TraversalArray(array, sizeof(array)/sizeof(array[0]));
int index = BinarySearch(array, 0, sizeof(array)/sizeof(array[0])-1, 2);
printf("index = %d \n", index);
return 0;
}