Chapter Twelve Searching and Sorting
description
Transcript of Chapter Twelve Searching and Sorting
![Page 1: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/1.jpg)
1
Chapter TwelveChapter Twelve
Searching and SortingSearching and Sorting
![Page 2: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/2.jpg)
2
Searching and SortingSearching and Sorting
• Searching is the process of finding a
particular element in an array
• Sorting is the process of rearranging the
elements in an array so that they are stored
in some well-defined order
![Page 3: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/3.jpg)
3
An ExampleAn Example
7 9 6 2 3 4
0 1 2 3 4 5
Find the value 3 in the following array:
![Page 4: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/4.jpg)
4
Searching in an Integer ArraySearching in an Integer Array
int findIntInArray(int key, int array[], int size){ int i;
for (i = 0; i < size; i++) { if (key == array[i]) return i; } return –1;}
![Page 5: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/5.jpg)
5
An ExampleAn Example
Given a coin, print the name of the coin:
> 5nickel> 25quarter> 1penny
![Page 6: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/6.jpg)
6
Searching Parallel ArraysSearching Parallel Arrays
0 1 0 penny 1 5 1 nickel 2 10 2 dime 3 25 3 quarter 4 50 4 half-dollar
![Page 7: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/7.jpg)
7
Searching Parallel ArraysSearching Parallel Arraysstatic string coinNames[] = { “penny”, “nickel”, “dime”, “quarter”, “half-dollar”};
static int coinValues[] = {1, 5, 10, 25, 50};
static int nCoins = sizeof coinValues / sizeof coinValues[0];
![Page 8: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/8.jpg)
8
Searching Parallel ArraysSearching Parallel Arraysmain() { int value, index; printf(“Enter coin value:”); scanf(“%d”, &value); index = findIntInArray(value, coinValues, nCoins); if (index == -1) { printf(“There is no such coin.\n”); } else { printf(“That is called a %s.\n”, coinNames[index]); }}
![Page 9: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/9.jpg)
9
An ExampleAn Example
What is the distance between Seattle and Boston?
Atlanta Boston Chicago Detroit Houston Seattle
Atlanta 0 1108 708 732 791 2625
Boston 1108 0 994 799 1830 3016
Chicago 708 994 0 279 1091 2052
Detroit 732 799 279 0 1276 2327
Houston 791 1830 1091 1276 0 2369
Seattle 2625 3016 2052 2327 2369 0
![Page 10: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/10.jpg)
10
Searching in a String ArraySearching in a String Array
#define NCities 6static int mileageTable[NCities][NCities] = { { 0, 1108, 708, 732, 791, 2625}, {1108, 0, 994, 799, 1830, 3016}, { 708, 994, 0, 279, 1091, 2052}, { 732, 799, 279, 0, 1276, 2327},
{ 791, 1830, 1091, 1276, 0, 2369},
{2625, 3016, 2052, 2327, 2369, 0 }};static string cityTable[NCities] = { “Atlanta”, “Boston”, “Chicago”, “Detroit”, “Houston”, “Seattle”};
![Page 11: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/11.jpg)
11
Searching in a String ArraySearching in a String Array
main(){ int city1, city2;
city1 = getCity(“Enter name of city #1: ”); city2 = getCity(“Enter name of city #2: ”); printf(“Distance between %s”, cityTable[city1]); printf(“ and %s:”, cityTable[city2]); printf(“ %d miles.\n”, mileageTable[city1][city2]);}
![Page 12: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/12.jpg)
12
Searching in a String ArraySearching in a String Arraystatic int getCity(string prompt){ string cityName; int index; while (TRUE) { printf(“%s”, prompt); cityName = getLine(); index = findStringInArray(cityName, cityTable, NCities); if (index >= 0) break; printf(“Unknown city name – try again.\n”); } return index;}
![Page 13: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/13.jpg)
13
Searching in a String ArraySearching in a String Array
int findStringInArray(string key, string array[], int size){ int i;
for (i = 0; i < size; i++) { if (stringEqual(key, array[i])) return i; } return –1;}
![Page 14: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/14.jpg)
14
Searching AlgorithmsSearching Algorithms
• Linear search: the search starts at the beginning of the array and goes straight down the line of elements until it finds a match or reaches the end of the array
• Binary search: the search starts at the center of a sorted array and determines which half to continue to search on that basis
![Page 15: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/15.jpg)
15
Binary SearchBinary Search
AtlantaBostonChicagoDenverDetroitHoustonLos AngelesMiamiNew YorkPhiladelphiaSan FranciscoSeattle
AtlantaBostonChicagoDenverDetroitHoustonLos AngelesMiamiNew YorkPhiladelphiaSan FranciscoSeattle
AtlantaBostonChicagoDenverDetroitHoustonLos AngelesMiamiNew YorkPhiladelphiaSan FranciscoSeattle
![Page 16: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/16.jpg)
16
Binary SearchBinary Searchint binarySearch(string key, string array[], int size) { int lh, rh, mid, cmp; lh = 0; rh = size –1; while (lh <= rh) { mid = (lh + rh) / 2; cmp = stringCompare(key, array[mid]); if (cmp == 0) return mid; if (cmp < 0) { rh = mid –1; } else { lh = mid + 1; } } return –1;}
![Page 17: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/17.jpg)
17
Relative EfficiencyRelative Efficiency
• Linear searchN comparisons
• Binary searchN/2/2/…/2 = 1N = 2k
k = log2N comparisons
N log2N 10 3 100 7 1,000 10 1000,000 20 1,000,000,000 30
![Page 18: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/18.jpg)
18
Sorting an Integer ArraySorting an Integer Array31 41 59 26 53 58 97 93
26 41 59 31 53 58 97 93
26 31 59 41 53 58 97 93
26 31 41 59 53 58 97 93
26 31 41 53 59 58 97 93
26 31 41 53 58 59 97 93
26 31 41 53 58 59 97 93
26 31 41 53 58 59 93 97
![Page 19: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/19.jpg)
19
Sorting by SelectionSorting by Selection
void sortIntArray(int array[], int size){ int lh, rh;
for (lh = 0; lh < size; lh++) { rh = findSmallestInt(array, lh, size – 1); swap(array, lh, rh); }}
![Page 20: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/20.jpg)
20
Sorting by SelectionSorting by Selection
int findSmallestInt(int array[], int low, int high){ int i, spos;
spos = low for (i = low; i <= high; i++) { if (array[i] < array[spos]) spos = i; } return spos;}
![Page 21: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/21.jpg)
21
Evaluating PerformanceEvaluating Performance
N Running Time 10 0.13 20 0.33 30 1.00 40 1.47 50 2.40 100 9.67 200 37.33 400 146.67 800 596.67
![Page 22: Chapter Twelve Searching and Sorting](https://reader035.fdocuments.us/reader035/viewer/2022062518/568143cc550346895db05b15/html5/thumbnails/22.jpg)
22
Analyzing PerformanceAnalyzing Performance
The number of comparisons
= N + (N –1) + (N – 2) + … + 3 + 2 + 1
= (N2 + N) / 2
The performance of the selection sort
algorithm is quadratic