dw做網(wǎng)站小技巧東莞網(wǎng)絡營銷公司
一、查找算法
1、二分查找:(前提條件: 必須有序的序列)
#include <stdio.h>
//二分查找 value代表的是被查找的值
int findByHalf(int *p, int n, int value)
{int low = 0;//low低int high = n-1;//high高int middle;//用來保存中間位置的下標while(low <= high)//注意此處循環(huán)結(jié)束的條件,需要加上 ={//不斷獲取中間位置的下標middle = (low + high) / 2;if(value < p[middle])//說明在前半段,移動high{high = middle-1;}else if(value > p[middle])//說明在后半段,移動low{low = middle + 1;}else//對應p[middle] == value 情況{return middle;}}return -1;//代表沒有找到
}int main(int argc, const char *argv[])
{int a[] = {12,34,56,77,89,342,567,7898};int i;for(i = 0; i < sizeof(a)/sizeof(a[0]); i++)//把數(shù)組中的每個元素都找一遍,進行測試程序{printf("%d post is %d\n",a[i],findByHalf(a,sizeof(a)/sizeof(a[0]),a[i]));}//查找10000返回 -1printf("%d post is %d\n",10000,findByHalf(a,sizeof(a)/sizeof(a[0]),10000));return 0;
}
2、分塊查找:(塊間有序,塊內(nèi)無序)
索引表 + 源數(shù)據(jù)表
思路:
(1)先在索引表中確定在哪一塊中
(2)再遍歷這一塊進行查找
//索引表
typedef struct
{
int max; //塊中最大值
int post;//塊的起始位置下標,post數(shù)組下標
}index_t; //索引
//源數(shù)據(jù)表
int a[19] = {18, 10, 9, 8, 16, 20, 38, 42, 19, 50, 84, 72, 56, 55, 76, 100, 90, 88, 108};
0 5 10 15
//索引表
index_t b[4] = {{18,0},{50,5},{84,10},{108,15}};