char names10010 char target20EGG Linear Search 0 1

  • Slides: 5
Download presentation
char names[100][10]; char target[20]="EGG"; Linear Search 線性搜尋: 0 1 2 3 4 5 6

char names[100][10]; char target[20]="EGG"; Linear Search 線性搜尋: 0 1 2 3 4 5 6 7 8 99 CAT GOA ADA FISH DOG BOY HEN EGG KEN … for (i=0; i<100; i++) if (strcmp(names[i], target)==0) break; if ( i<100 ) printf ("found!n"); else printf ("not found!n"); 2020年 11月22日 Sorting & Searching 1

Binary Search 二分搜尋: char A[10][5]; char target[5]="HEN"; int lo=0, hi=9, mid; lo=mid+1 mid=(lo+hi)/2 mid

Binary Search 二分搜尋: char A[10][5]; char target[5]="HEN"; int lo=0, hi=9, mid; lo=mid+1 mid=(lo+hi)/2 mid lo A[i] 1 hi 0 1 2 3 4 5 6 7 8 9 ADA BOY CAT DOG EGG FISH GOA HEN IDA KEN No A[mid]=target ? ? 2020年 11月22日 Sorting & Searching Yes A[mid]=target ? ? 2

Binary Search 二分搜尋: char A[10][5]; char target[5]="CAT"; int lo=0, hi=9, mid; 2 mid=(lo+hi)/2 lo=mid+1

Binary Search 二分搜尋: char A[10][5]; char target[5]="CAT"; int lo=0, hi=9, mid; 2 mid=(lo+hi)/2 lo=mid+1 hi=mid-1 mid lo A[i] hi 0 1 2 3 4 5 6 7 8 9 ADA BOY CAT DOG EGG FISH GOA HEN IDA KEN No Yes A[mid]=target ? ? 2020年 11月22日 No A[mid]=target ? ? Sorting & Searching 3

Binary Search 二分搜尋: char A[10][5]; char target[5]="CAT"; "CAB" int lo=0, hi=9, mid; 3 mid=(lo+hi)/2

Binary Search 二分搜尋: char A[10][5]; char target[5]="CAT"; "CAB" int lo=0, hi=9, mid; 3 mid=(lo+hi)/2 lo=mid+1 A[i] hi=mid-1 mid lo hi 0 1 2 3 4 5 6 7 8 9 ADA BOY CAT DOG EGG FISH GOA HEN IDA KEN No No target < A[mid] 2020年 11月22日 No hi<lo not found Sorting & Searching 4

二分搜尋 Binary Search int binary. Search (char target[]){ int lo=0, hi=9, mid, pos, n;

二分搜尋 Binary Search int binary. Search (char target[]){ int lo=0, hi=9, mid, pos, n; pos = -1; // not found while ( lo<=hi && pos<0 4 ){ mid = (lo+hi)/2; n = strcmp (target, A[mid]); pos = mid; if (n==0) else if (n<0) hi = mid-1; lo = mid+1; else } lo } return pos; 0 2020年 11月22日 A[i] ADA mid 1 2 3 4 BOY CAT DOG hi 5 Sorting & Searching EGG FISH 6 7 8 9 GOA HEN IDA KEN 5