자료구조,알고리즘
색인순차검색
코딩 공부중
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(); } }