자료구조,알고리즘

색인순차검색

코딩 공부중 2020. 1. 3. 16:18
#include 
#define INDEX_SIZE 3
typedef int element;

typedef struct {
	int index;
	element key;
} iTable;
 
iTable indexTable[INDEX_SIZE];
 
void sequentialSearch2(element a[], int begin, int end, element key)
{
	int i = begin;
	printf("\n %d를 검색하라! ->>", key);
	while (i < end && a[i] < key) i++;

	if (a[i] == key)
		printf("%d번째에 검색 성공\n\n", (i - begin) + 1);
	else
		printf("%d번째에 검색 실패 \n\n", (i - begin) + 1);
}

void makeIndexTable(element a[], int size)
{
	int i, n;
	n = size / INDEX_SIZE;
	if (size % INDEX_SIZE > 0)
		n = n + 1;
	for (i = 0; i < INDEX_SIZE; i++)
	{
		indexTable[i].index = i * n;
		indexTable[i].key = a[i*n];
	}
}

void indexSearch(element a[], int n, element key)
{
	int i, begin, end;
	if (key < a[0] || key > a[n - 1])
		printf("차는 키가 없습니다. 검색실패\n");
	for (i = 0; i < INDEX_SIZE; i++)
		if ((indexTable[i].key <= key) && (indexTable[i + 1].key > key))
		{
			begin = indexTable[i].index;
			end = indexTable[i + 1].index;
			break;
		}
	if (i == INDEX_SIZE)
	{
		begin = indexTable[i - 1].index;
		end = n;
	}

	sequentialSearch2(a, begin, end, key);
	void binarySearch(element a[], int n, element key)
	{
		int middle;
		begin = 0; end = n - 1;
		while (begin <= end)
		{
			middle = (begin + end) / 2;
			if (key == a[middle]) {
				printf("%d번째 검색성공\n");
				return middle;
			}
			else if (key < [middle]) {
				end = middle - 1;
			}
			else if (key > a[middle]) {
				begin = middle + 1;
			}
		}
		printf("검색실패\n");
		return;
	}

	void main()
	{
		element a[] = { 1, 2, 8, 9,11,19,29 };
		int n = 7;
		printf("\n/t<< 색인 순차 검색>> \n");
		makeIndexTable(a, n);
		indexSearch(a, n, 9);
		indexSearch(a, n, 6);
		getchr();
	}
}