int block_search (RecordList l, int key) { BlockList (BLOCK_SIZE, l.length, 1); int i; for (i = 0; i < block_list1.length; i++) { block_list1.r[i].addr = i * block_list1.block_length; block_list1.r[i].max_key = l.r[i*5].key; } for (i = 0; i < l.length; i++) if (block_list1.r[i/5].max_key < l.r[i].key) block_list1.r[i/5].max_key = l.r[i].key; for (i = 0; i < block_list1.length; i++) { if (key < block_list1.r[i].max_key) { l.list_s = block_list1.r[i].addr; l.list_e = (i == block_list1.length-1 ? l.length : block_list1.r[i+1].addr-1); return seq_search (l, key); } } return l.length; }
//============================================================================= // Get iterator to first cluster on a given plane inside a given time window //============================================================================= TbClusterFinder::Iterator TbClusterFinder::getIterator( const double& t, const unsigned int& plane) { if (m_searchAlgo == SearchMethod::Seq) { return seq_search(t, plane); } else if (m_searchAlgo == SearchMethod::AdapSeq) { return adap_seq_search(t, plane); } warning() << "Unknown search algorithm" << endmsg; return adap_seq_search(t, plane); }
int main (void) { int array[MAX_INPUT]; int n, i; for (n = 0; n < MAX_INPUT; n++) if (scanf ("%d", &array[n]) != 1) break; for (i = 0; i < n; i++) { int result = seq_search (array, n, array[i]); if (result != i) printf ("seq_search() returned %d looking for %d - expected %d\n", result, array[i], i); } return 0; }
void main(int argc, const char* argv[]){ if(argc < 2){ printf("You have to enter size of array \n"); exit(0); } int num = atoi(argv[1]); int array[num]; int i = 0; int num_req; for(i = 0; i < num; i++){ array[i] = rand() % num; } print(array, num); printf("Enter element to be searched \n"); scanf("%d",&num_req); seq_search(array,num, num_req); }
/* INDEX_SIZE는 인덱스 테이블의 크기,n은 전체 데이터의 수 */ int index_search(int key) { int i, low, high; /* 키 값이 리스트 범위 내의 값이 아니면 탐색 종료 */ if(key<list[0] || key>list[n-1]) return -1; /* 인덱스 테이블을 조사하여 해당키의 구간 결정 */ for(i=0; i<INDEX_SIZE; i++) if(index_list[i].key<=key && index_list[i+1].key>key) break; if(i==INDEX_SIZE){ /* 인덱스테이블의 끝이면 */ low = index_list[i-1].index; high = n; } else{ low = index_list[i].index; high = index_list[i+1].index; } /* 예상되는 범위만 순차 탐색 */ return seq_search(key, low, high); }