Пример #1
0
// 测试顺序查找
//
void test_sequential_search()
{
	const int length = 11;
	int array[length] = {65, 32, 49, 10, 18, 72, 27, 42, 18, 58, 91};

	int key1 = 72;
	int key2 = 55;
	int pos;

	print_array(array, length, " data: ");

	pos = sequential_search(array, length, key1);
	printf(" try searching %d, index is %d\n", key1, pos);

	pos = sequential_search(array, length, key2);
	printf(" try searching %d, index is %d\n", key2, pos);
}
Пример #2
0
int main()
{
    /* 我的第一个 C 程序 */
    printf("Hello, World! \n");

    int a[] = {1, 2, 3};
    int result = sequential_search(a, 3, 2);
    printf("%d\n", result);
 
    return 0;
}
Пример #3
0
int main()
{
	int *a;
	int i;

	a = (int *) malloc(sizeof(int) * N_ELEMENTS);

	a[0] = 0;
	for (i = 1; i < N_ELEMENTS; i++) {
		if (rand() % 2)
			a[i] = a[i - 1];
		else
			a[i] = a[i - 1] + 3;
	}

#if 0
	for (i = 0; i < 10000; i++) {
		int r1, r2, r3;
		printf("s%d\n", i);
		r1 = sequential_search(i, a, N_ELEMENTS);
		printf("b%d\n", i);
		r2 = binary_search(i, a, N_ELEMENTS);
		printf("t%d\n", i);
		r3 = ternary_search(i, a, N_ELEMENTS);

		if (r1 != -1 && a[r1] != i) {
			printf("error!");
			exit(0);
		}

		if (r2 != -1 && a[r2] != i) {
			printf("error!");
			exit(0);
		}

		if (r3 != -1 && a[r3] != i) {
			printf("error!");
			exit(0);
		}
	}
#endif

	START_TIME;
	printf("%d\n", SEARCH(120000000, a, N_ELEMENTS));
	printf("%d\n", SEARCH(1000, a, N_ELEMENTS));
	printf("%d\n", SEARCH(0, a, N_ELEMENTS));
	printf("%d\n", SEARCH(3, a, 1));
	printf("%d\n", SEARCH(6, a, 2));
	printf("%d\n", SEARCH(9, a, 4));
	printf("%d\n", SEARCH(9, a, 20));
	END_TIME;
	return 0;
}
Пример #4
0
/*
 * Test binary search on array a of size n
 */
static void test_binary_search(int32_t *a, uint32_t n) {
  int32_t x, k, j, top;

  print_array(a, n);
  top = 5 * n + 12;

  for (x=-12; x <top; x ++) {
    k = binary_search(a, n, x);
    j = sequential_search(a, n, x);
    printf("index of %4"PRId32" = %"PRId32"\n", x, k);
    if (j != k || (k>=0 && a[k] != x)) {
      printf("*** BUG ***\n");
    }
  }
}
Пример #5
0
/*
 * Speed test: sequential search
 */
static void speed_test_sequential_search(int32_t *a, uint32_t n) {
  double start, done;
  uint32_t i;
  int32_t x, top;

  top = 5 * n + 12;
  printf("Sequential search: size = %"PRIu32"   (10000*%"PRId32" searches)\n", n, top+12);
  start = get_cpu_time();
  for (i=0; i<10000; i++) {
    for (x = -12; x<top; x++) {
      (void) sequential_search(a, n, x);
    }
  }
  done = get_cpu_time();
  printf("Total time: %.4f\n", done - start);
}
int main(void)
{
    out("starting ...\n");
    std::cout << " SubString search " << std::endl;

    char haystack[10000] = {0};
    char needle[256] = {0};
    scanf("%s\n",&haystack);
    out("searching in %s \n", &haystack);
    while(scanf("%s\n",&needle) != EOF) 
    { 
        int counter = 0;
        int loc = sequential_search(haystack, needle, counter);

        if(loc >=0 ) printf("found in location  %d after %d probes\n", loc, counter);
        else printf("NOT found after %d probes\n",counter);
    }

    return 0;
}
Пример #7
0
void search_index_data(SCHEMA *schema) {

    int i, test_count, search_return, n_elements;
    long int location, offset;
    void *aux;
    char *filename_index, *search_term, *filename_data, *print_field, *search_key;
    NODE *node = schema->sentry;
    FILE *fp_index, *fp_data;

    // Sao lidos da stdin o campo a ser analisado na busca, a chave desejada e o campo a ser impresso apos a busca
    search_term = my_get_line(stdin, &i);
    search_key = my_get_line(stdin, &i);
    print_field = my_get_line(stdin, &i);

    // test_count armazena o numero de iteracoes de busca e offset armazena o offset do tipo sendo analisado em relação á posição do elemento
    // como um todo
    test_count = 0;
    offset = 0;
    // Sao analizados todos os elementos ate ser encontrado o que deseja-se para a busca
    for(i = 0; i < schema->n_elements; i++) {
        node = node->next;
        if(strcmp(search_term, node->name) == 0 && node->order) {

            // O arquivo .idx é aberto para leitura
            filename_index = (char*)malloc(sizeof(char) * (strlen(schema->name) + 6 + strlen(node->name)));
            strcpy(filename_index, schema->name);
            strcat(filename_index, "-");
            strcat(filename_index, node->name);
            strcat(filename_index, ".idx");
            fp_index = fopen(filename_index, "rb");

            if(fp_index != NULL) {

                // Analisa-se quantos elementos estão presentes no  .idx
                fseek(fp_index, 0, SEEK_END);
                location = ftell(fp_index);
                n_elements = (int)(location/(sizeof(long int) + node->size));
                fseek(fp_index, 0, SEEK_SET);

                // É realizada a busca binaria
                search_return = binary_search(fp_index, schema, node, search_key, 0, n_elements-1, &test_count);
                // E o arquivo é fechado
                fclose(fp_index);
                if(search_return == -1) {
                    // Caso não tenha sido encontrado o item desejado no indice, realiza-se a busca sequencial
                    // nos itens que foram adicionados no fim do .data
                    search_return = sequential_search(schema, node, search_key, &test_count, offset);
                }
            } else {
                fprintf(stderr, "could not open file\n");
                exit(1);
            }
            // Liberacao da memoria alocada
            free(filename_index);

            // Imprime o numero de iteracoes da busca realizadas
            printf("%d\n", test_count);
            // Caso nao tenha sido encontrado o item, imprime a mensagem de erro
            if(search_return == -1) {
                printf("value not found\n");
            } else {
                // Caso o item tenha sido encontrado, procura o offset do item a ser impresso em relação
                // ao elemento como um todo
                node = schema->sentry;
                offset = 0;
                for(i = 0; i < schema->n_elements; i++) {
                    node = node->next;
                    if(strcmp(print_field, node->name) == 0) {
                        break;
                    }
                    offset += node->size;
                }

                // O arquivo .data é aberto para leitura
                filename_data = (char*)malloc(sizeof(char) * (strlen(schema->name)+6));
                strcpy(filename_data, schema->name);
                strcat(filename_data, ".data");
                fp_data = fopen(filename_data, "rb");
                if(fp_data == NULL) {
                    fprintf(stderr, "could not open file\n");
                    exit(1);
                }

                // A variavel aux armazena o conteudo do item a ser impresso
                fseek(fp_data, search_return+offset, SEEK_SET);
                aux = malloc(node->size);
                fread(aux, node->size, 1, fp_data);
                // E o arquivo é fechado
                fclose(fp_data);

                // A impressao é feita de acordo com o tipo sendo analisado
                if(node->id == INT_T) {
                    printf("%d\n", *((int*)aux));
                } else if(node->id == DOUBLE_T) {
                    printf("%.2lf\n", *((double*)aux));
                } else if(node->id == STRING_T) {
                    printf("%s\n", (char*)aux);
                }
                // E a memoria alocada é liberada
                free(aux);
                free(filename_data);
            }
            // caso o item seja encontrado, o valor de i é alterado para que saia do loop
            i = schema->n_elements+1;
        }
        // O valor de offset é incrementado com o tamanho do item anterior analisado
        if(i <= schema->n_elements) {
            offset += node->size;
        }
    }

    // Caso não tenha sido realizada nenhuma iteracao de busca, não foi encontrado nenhum arquivo .idx do campo buscado
    if(test_count == 0) {
        printf("index not found\n");
    }
    // Libera a memoria alocada
    free(search_term);
    free(search_key);
    free(print_field);
}
Пример #8
0
main()
{
  int list[] = {54, 2, 40, 22, 17, 22, 60, 35};    
  printf("%d", sequential_search(list, 8, 22));
  getchar();      
}