天天看点

C++ 常用查找算法

#include <iostream>
#include <string>
using namespace std;

struct ElemType {
	int key;
	int age;
};

struct SSTable {
	ElemType *R;
	int length;
};
/
//顺序查找  O(n)
int Search_Sq(SSTable s, int key) {
	for (int i=s.length; i>=1; --i) {
		if (s.R[i].key == key) {
			return i;
		}
	}
	return 0;
}
/
//设置监视哨的顺序查找
int Search_Seq(SSTable ST, int key){
	ST.R[0].key = key;
	int i=0;
	for (i=ST.length; ST.R[i].key!=key; --i);
	return i;
}
/
//折半查找
int Search_Bin(SSTable ST, int key) {
	int low =1;
	int high = ST.length;
	while (low <= high) {
		int mid = (low +high) /2;
		if (key == ST.R[mid].key) {
			return mid;
		} 
		else if (key < ST.R[mid].key){
			high = mid-1;
		}
		else 
			low = mid +1;
	}

	return 0;
}
///
//递归实现实现折半查找
int search(SSTable ST, int low, int high, int key) {
	int mid = (low + high)/;
	if (ST.R[mid].key == key) {
		return mid;
	}
	else if (ST.R[mid].key < key) {
		search(ST, mid+1, high );
	}
	else {
		search(ST, low, mid-1);
	}
	return 0;
}