How to implement m-block search in an array in C? I rummaged through a half-runet and found only a brief description, and then itβs the same everywhere.
1 answer
I agree with the author, some kind of horror, they all copy the text from the books "Gromov Y. Yu., Tatarenko S. I. Programming in the SI language" and consider this an answer to the question =)
Here is the algorithm from my home library =)
/* M-Π±Π»ΠΎΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΉ (ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ) ΠΌΠ°ΡΡΠΈΠ² B Π΄Π»ΠΈΠ½Ρ N ΡΠ°Π·Π±ΠΈΡ Π½Π° M ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² B1, B2, ..., BM Π΄Π»ΠΈΠ½ N1, N2, ..., NM, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ B={ B1, B2 , .., BM}. ΠΠ»Ρ Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ° V, Π½ΡΠΆΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈΠ· ΡΠΏΠΈΡΠΊΠΎΠ² Bi, i=1,M, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ V, Π° ΠΏΠΎΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΊ ΡΠΏΠΈΡΠΊΡ Bi. */ #include<stdio.h> void main() { int i, a[100], b[100], j, s = 0, k, x, z; int t; for (i = 0; i < 100; i++) a[i] = 0, b[i] = 0; // ΠΠ²ΠΎΠ΄ ΠΌΠ°ΡΡΠΈΠ²Π° (ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ!) for (i = 0;; i++) { printf("Enter A:"); scanf("%d", &a[i]); if (a[i] == -1) break; } // ΠΠ²ΠΎΠ΄ Π΄Π»ΠΈΠ½Π½ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² for (j = 0;; j++) { printf("Enter LEN"); scanf("%d", &b[j]); if ((s += b[j]) >= i) break; } printf("Find:"); scanf("%d", &x); j = 0; // printf("%d %d %d\n", k, a[k], b[j-1]); for (k = b[j++] - 1; (a[k] < x) && (k <= i); k += b[j++]) ; if (k > i) { printf("Error"); return; } for (z = k - b[j - 1]; (z <= k); z++) { if (a[z] == x) { printf("Number:%d\n", z); break; } } if (z >= k) printf("Not found\n"); }
- Perfectly! Thank you friend for help !!! - Endru
|