|
Posted on 2009-03-24 15:47 赞劲小子 阅读(4080) 评论(0) 编辑 收藏 引用 所属分类: 算法设计与分析
折半查找时,先得将数组排序。
/**//** * 将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置 * 为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。 * 通过一次比较,将查找区间缩小一半。折半查找是一种高效的查找方法。它可以明显减少比较次数, * 提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。 **/ #include "iostream.h"
void bubble(int array[], int size); int binarysearch(int array[], int searchkey, int low, int high, int size);
int main(){ int array[10] = {7,6,8,5,10,9,2,4,3,1}; int array1[9] = {7,6,8,5,10,9,2,4,3}; bubble(array,10); // 数组元素为偶数 bubble(array1,9); // 数组元素为奇数 cout << binarysearch(array,1,0,9,10); cout << binarysearch(array,4,0,8,9); return 0; }
void bubble(int array[], int size){ bool tag; for(int pass = 0; pass < size - 1; pass++ ){ tag = true; for(int j = 0 ; j < size - 1; j++) {
int temp; if(array[j] > array[j + 1]){ temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; tag = false; } } if(tag == true) return ; } } int binarysearch(int array[], int searchkey, int low, int high, int size){ int middle; while(low <= high){ middle = (low + high) / 2; if(searchkey == array[middle]) return middle; else if(searchkey > array[middle]) low = middle + 1; else high = middle - 1; } return -1; }
|