Essentials of Geometry Eleanor Roosevelt High School Geometry Mr. Chin-Sung Lin.
Algorithms Chin-Sung Lin Eleanor Roosevelt High School.
-
Upload
meghan-flowers -
Category
Documents
-
view
217 -
download
1
Transcript of Algorithms Chin-Sung Lin Eleanor Roosevelt High School.
Algorithms
Chin-Sung Lin
Eleanor Roosevelt High School
Algorithms
• Types of Algorithms
– Brute-Force (or Exhaustive Search)
– Divide and Conquer
– The Greedy Method
– Recursion
• Algorithms of Skyscrapers Project
– Review of Pseudo Code
– Decimal-to-Binary Conversion Algorithm
• A Crash Course of C
• Sorting Algorithms
• Searching Algorithms
Brute-Force Algorithms
Brute-Force (or Exhaustive Search)
• Brute-force is a straightforward approach to solving a problem, usually directly based on the problem’s statement and definitions of the concepts involved.
• Try out all possible values or combinations to solve a
problem, or try every possible solution to see which is best.
Brute-Force (or Exhaustive Search) Example
• Example:
Try out all possible combinations to open a lock.
• Example:
Try out all possible password values to log into an account.
• Example:
Compute an for a given number a and a nonnegative
integer n. By the definition of exponentiation, an = a a a.
• Example:
Build 300-block skyscraper by adding one block each week.
n times
Brute-Force (or Exhaustive Search) Example
Though inefficient in general, the brute-force algorithm should not be
overlooked as an important algorithm design strategy for the following
reasons:
• It is applicable to a very wide variety problems, and seems to be
the only general approach for all problems.
• The expense of designing a more efficient algorithm may be
unjustifiable if only a few instances of a problem need to be solved
and a brute-force algorithm can solve those instances with
acceptable speed.
• It is useful for solving small-size instances of a problem.
• It can serve as an important theoretical or education purpose, e.g.,
as a benchmark to judge more efficient alternatives algorithms.
Brute-Force (or Exhaustive Search)
Divide and Conquer Algorithms
Divide and Conquer
• Repeatedly reduces an instance of a problem to one or more
smaller instances of the same problem (usually recursively)
until the instances are small enough to solve easily. The
solutions to the subproblems are then combined to give a
solution to the original problem.
The most well known algorithm design strategy:
1. Divide the problem into two or more smaller subproblems.
2. Conquer the subproblems by solving them recursively.
3. Combine the solutions to the subproblems into the
solutions for the original problem.
Divide and Conquer
Example:
Large-integer multiplication (The Grade-School Algorithm)
a1 a2 … an
x b1 b2 … bn
(d10) d11d12 … d1n
(d20) d21d22 … d2n
… … … … … … …
(dn0) dn1dn2 … dnn
This process requires n2 single digit multiplications.
For 1231 2012, this process requires 16 multiplications.
Divide and Conquer Example
Large-integer multiplication (Divide and Conquer Algorithm)1231 2012
= (12*102 + 31) * (20*102 + 12)
= (12*20)*104 + c1*102 + 31*12
where c1 = (12+31)*(20+12) – 12*20 – 31*12 = 764
12*20 = (1*10 + 2) * (2*10 + 0)
= (1*2)*102 + c2*10 + 2*0
where c2 = (1+2)*(2+0) – 1*2 – 2*0 = 4
31*12 = (3*10 + 1) * (1*10 + 2)
= (3*1)*102 + c3*10 + 1*2
where c3 = (3+1)*(1+2) – 3*1 – 1*2 = 7
(12+31)*(20+12) = 43 * 32
= (4*10 + 3) * (3*10 + 2)
= (4*3)*102 + c4*10 + 3*2
where c4 = (4+3)*(3+2) – 4*3 – 3*2 = 17
This process requires 9 digit multiplications as opposed to 16.
Divide and Conquer Example
Greedy Algorithms
14
• An optimization problem is one in which you want to find,
not just a solution, but the best solution.
• It is not exhaustive, and does not give an accurate answer
to many problems. But when it works, it is the fastest
method.
• A greedy algorithm works in phases. At each phase:
– You take the best you can get right now, without regard for
future consequences
– You hope that by choosing a local optimum at each step,
you will end up at a global optimum
Greedy Algorithms
Greedy Algorithm Example
• Example:
Pay out the exact amount of money using US monetary system.
• Example:
The knapsack problem – Given a set of
items, each with a mass and a value,
determine the number of each item to
include in a collection so that the total
weight is less than or equal to a given
limit and the total value is as large as
possible.
• Example: Dijkstra's algorithm (single-source shortest path problem)
Works on both directed and undirected graphs. However, all edges must have nonnegative weights.
Input: Weighted graph and source vertex (v) such that all edge weights are nonnegative Output: Lengths of shortest paths (or the shortest paths themselves) from a given source vertex (v) to all other vertices
Greedy Algorithm Example
Greedy Algorithm Example
Greedy Algorithm Example
Greedy Algorithm Example
Greedy Algorithm Example
Greedy Algorithm Example
Greedy Algorithm Example
Greedy Algorithm Example
Greedy Algorithm Example
Greedy Algorithm Example
Greedy Algorithm Example
Recursive Algorithms
Recursive Algorithms
Recursive Algorithms
Recursive Algorithms
Recursive Algorithms
Recursive Algorithms
Recursive Algorithms
Recursion
A recursive function is one which calls itself. To prevent infinite
recursion, you need an if-else statement (of some sort) where
one branch makes a recursive call, and the other branch does
not.
Recursion
Dream (problem)
{
If problems solved
return solution
else
dream(problem)
}
Recursion Example
• Example: Calculate the factorial of N:
N! = N x (N-1) x (N-2) x ……. x 3 x 2 x 1
Traditional algorithm using Loop:
Factorial ()
1. Let index = 1
2. Let product = 1
3. For index = 1 to N
product = product x index
4. end-For
5. return product
Recursion Example
• Example: Calculate the factorial of N:
N! = N x (N-1) x (N-2) x ……. x 3 x 2 x 1
Recursive algorithm:
Factorial(long n)
{ if (n==1)
return(n); else return(n * factorial(n-1));}
Recursion ExampleA traditional algorithm for finding the Fibonacci Numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ……)
Fibonacci ()1. Input N 2. Let result0 = 0 3. Let result1 = 1 4. If N = 1 or N = 25. result = N - 16. else7. for loop counter = 2 to N – 1 8. result = result1 + result09. result0 = result110. result1 = result11. end-for loop12. end-if13. output result
Recursion Example
A recursive algorithm for finding the Fibonacci Numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ……)
Fibonacci (N)1. If N = 1 or N = 22. return (N – 1)3. else 4. return Fibonacci (N – 1) + Fibonacci (N – 2) 5. end-if
Algorithms of Skyscrapers Project
Algorithms of Skyscrapers Project
Rules:
• Using prefabricated-modular blocks of 100 meters long, 100 meters
wide, and 5 meters tall.
• The blocks interlock on top and bottom (like Legos), and they cannot be
stacked sideways.
• Using special lifters, putting stacks of blocks at the same height on
ground or on top of another set of equal-height stacks takes one week
regardless of how tall the stacks are or how many stacks are lifted.
• The prefabrication time of the blocks doesn’t count since they are
already in stock.
• No resource/budget limitations (i.e., you can have as many stacks as
possible at the same time),
Algorithms of Skyscrapers Project
Problem Part A:
• If a client wants to build a 100-meter long, 100-meter wide, and
1500-meter high tower as quickly as possible, what is the shortest
amount of time that it will take to build the tower?
• Show your algorithm in both flowchart and pseudocode forms.
Problem Part B:
• Develop a general algorithm for skyscrapers of 100-meter long,
100-meter wide, and N-meter high (where N is a multiple of 5) in
pseudocode format.
Review of Pseudocode
Convention of Pseudocode
Write pseudocode for: • calculating total number of blocks needed for N-meter high
skyscraper.
• calculating the remainder of number of stacks divided by 2.
• creating a while loop to work as long as the number of stacks is
not equal to 1.
• creating a counter to increment the week count in a while loop.
Convention of Pseudocode
Write pseudocode for: • calculating total number of blocks needed for N-meter high
skyscraper.
1. numberBlock = N/5
Convention of Pseudocode
Write pseudocode for: • calculating the remainder of number of stacks divided by 2.
1. Remainder = numberStack % 2
Convention of Pseudocode
Write pseudocode for: • creating a while loop to work as long as the number of stacks is
not equal to 1.
1. While loop numberStack ≠ 1
2. ……
3. end-loop
Convention of Pseudocode
Write pseudocode for: • creating a counter to increment the week count in a while loop.
1. weekCounter = 0
2. While loop numberStack ≠ 1
3. weekCounter = weekCounter + 1
4. end-loop
Group Presentation of
Skyscraper Algorithms
Decimal-to-Binary Conversion Algorithm
Decimal-to-Binary Conversion
2 4 0
1 2 0
6 0
3 0
1 5
7
3
1
1
1
1
0
0
0
2
2
2
2
2
2
2
Decimal: 2 4 0
Binary: 1 1 1 1 0 0 0 0
No. of Division 7
No. of One’s: 4
No. of Weeks: 7 + 4 = 11
0
A Crash Course of C
C Example: Sum of 1+ 2+…+N1. // Calculate the Sum of 1 + 2 + 3 + ….. + N
2. #include <stdio.h>
3. int main ()
4. {
5. int n, i;
6. int sum = 0;
7. printf("Enter N: ");
8. scanf("%d", &n);
9. for (i = 1; i <= n; i++)
10. sum = sum + i;
11. printf("Sum = %d\n", sum);
12. return 0;
13. }
C Example: Average of Numbers1. // Calculate the average of three numbers
2. // average = (a + b + c)/3
3. #include <stdio.h>
4. int main()
5. {
6. float a, b, c;
7. float average;
8. printf ("Averaging three numbers \n");
9. printf ("Enter three numbers a, b, and c: ");
10. scanf ("%f %f %f", &a, &b, &c);
11. average = (a + b + c)/3.0;
12. printf("Average = %.2f\n", average);
13. return 0;
14. }
C Example: Linear Equation1. // Solve Linear Equation
2. // ax + b = c, x = (c - b)/a
3. #include <stdio.h>
4. int main()
5. {
6. float a, b, c;
7. float x;
8. printf("Solve linear equation: ax + b = c\n");
9. printf("Enter coefficients: a, b, c: ");
10. scanf ("%f %f %f", &a, &b, &c);
11. x = (c - b)/a;
12. printf ("x = %.2f\n", x);
13. return 0;
14. }
C Example: Skyscraper Algorithm1. // Skyscraper Algorithm
2. #include <stdio.h>
3. int main()
4. {
5. int noWeek, buildingHeight, noStack, remainder;
6. noWeek = 1;
7. printf ("Hello! Please enter the building height: ");
8. scanf ("%d", &buildingHeight);
9. noStack = buildingHeight/5;
10. while (noStack != 1)
11. {
12. remainder = noStack%2;
13. noStack = noStack/2;
14. noWeek = noWeek + remainder + 1;
15. }
16. printf("Number of Week to Build the Skyscraper is: %d\n", noWeek);
17. return 0;
18. }
C Example: Square Root1. #include <stdio.h>
2. #include <math.h>
3. int main()
4. {
5. float a;
6. float x;
7. printf("Please enter the number: ");
8. scanf("%f", &a);
9. if (a < 0)
10. printf("No solution.\n");
11. else
12. {
13. x = sqrt(a);
14. printf("sqrt(%.2f) = %.5f\n", a, x);
15. }
16. return 0;
17. }
C Example: Integer Array1. // Integer Array
2. #include <stdio.h>
3. #define MAX 5
4. int main()
5. {
6. int array[MAX];
7. float sum = 0.;
8. int i;
9. printf("Enter 5 integers: ");
10. for (i =0; i < MAX; i++)
11. {
12. scanf("%d", &array[i]);
13. sum = sum + array[i];
14. }
15. for (i =0; i < MAX; i++)
16. printf("array[%d] = %d\n", i, array[i]);
17. printf("Average = %.2f\n", sum/MAX);
18. return 0;
19. }
C Example: Integer ArrayOutput:
Enter 5 integers: 1 2 3 4 5
array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
array[4] = 5
Average = 3.00
Output:
Enter 5 integers: 1 2 3 4 6
array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
array[4] = 6
Average = 3.20
C Example: Character Strings1. // Strings are Array of Characters.
2. #include <stdio.h>3. #include <string.h>4. #define MAX_STRING_LENGTH 805. int main()6. {7. char str[MAX_STRING_LENGTH];8. unsigned long length;9. int i;10. str[0] = 'H';11. str[1] = 'e';12. str[2] = 'l';13. str[3] = 'l';14. str[4] = 'o';15. str[5] = '!';16. str[6] = '\0';17. length = strlen(str);18. for (i = 0; i < length; i++) 19. printf("str[%d] = %c\n", i, str[i]);20. printf("\nstring =\t%s\n", str);21. printf("length =\t%lu\n", length);22. return 0;23. }
C Example: Character StringsOutput:
str[0] = Hstr[1] = estr[2] = lstr[3] = lstr[4] = ostr[5] = !
string = Hello!length = 6
1. // Strings are Array of Characters.2. #include <stdio.h>3. #include <string.h>4. #define MAX_STRING_LENGTH 805. int main()6. {7. char str[MAX_STRING_LENGTH];8. unsigned long length;9. int i;10. str[0] = 'H';11. str[1] = 'e';12. str[2] = 'l';13. str[3] = 'l';14. str[4] = 'o';15. str[5] = '!';16. str[6] = '\0';17. length = strlen(str);18. for (i = 0; i < length; i++) 19. printf("str[%d] = %c\n", i, str[i]);20. printf("\nstring =\t%s\n", str);21. printf("length =\t%lu\n", length);22. return 0;23. }
C Example: Strings Operations1. // Strings IO from Command Line2. // String Comparison, Concatenation &
Copy3. #include <stdio.h>4. #include <string.h>5. #define MAX_STRING_LENGTH 806. int main()7. {8. char str1[MAX_STRING_LENGTH];9. char str2[MAX_STRING_LENGTH];10. char str3[MAX_STRING_LENGTH];11. printf("\nString 1: ");12. scanf("%s", str1);13. printf("\nString 2: ");14. scanf("%s", str2);15. printf("\nString1 =\t%s\n", str1);16. printf("\nString2 =\t%s\n", str2);
17. if(strcmp(str1, str2) > 0)18. {19. printf("\nString1 > String2\n");20. strcat(str1, str2);21. printf("\nString1=\t%s\n", str1);22. printf("\nString2=\t%s\n", str2);23. }24. else if (strcmp(str1, str2) < 0)25. {26. printf("\nString1 < String2\n");27. strcat(str2, str1);28. printf("\nString1=\t%s\n", str1);29. printf("\nString2=\t%s\n", str2);30. }31. else32. {33. printf("\nString1 = String2\n");34. strcpy(str3, str1);35. printf("\nString3: %s\n", str3);36. }37. return 0;38. }
ASCII Code
C Example: Strings Operations
Output:
String 1: Kaela
String 2: Eva
String1 = Kaela
String2 = Eva
String1 > String2
String1= KaelaEva
String2= Eva
Output:
String 1: Dante
String 2: Pawan
String1 = Dante
String2 = Pawan
String1 < String2
String1= Dante
String2= PawanDante
Output:
String 1: ELRO
String 2: ELRO
String1 = ELRO
String2 = ELRO
String1 = String2
String3: ELRO
C Example: File R/W, Strings & Array1. // Read / Write Strings and Integers from / to Files2. #include <stdio.h>3. #define FILESIZE 104. #define STRINGLENGTH 155. int main()6. {7. FILE* fileInput = NULL;8. FILE* fileOutput = NULL;9. char str[FILESIZE][STRINGLENGTH];10. int number[FILESIZE];11. int i;12. fileInput = fopen("input.txt", "r");13. fileOutput = fopen("output.txt", "w"); 14. for (i = 0; i < FILESIZE; i++)15. fscanf (fileInput, "%s %d", str[i], &number[i]);16. for (i = 0; i < FILESIZE; i++)17. fprintf(fileOutput, "string[%d] = %13s number[%d] = %3d\n\n", i, str[i], i, number[i]*2);18. for (i = 0; i < FILESIZE; i++)19. fprintf(fileOutput, "%s ", str[i]);20. fprintf(fileOutput, "\n\n");21. fclose(fileInput);22. fclose(fileOutput);23. }
C Example: File R/W, Strings & ArrayFILE: in.txt
The 10purpose 20of 30this 40project 50is 60to 70have 80fun 90:) 100
FILE: output.txt
string[0] = The number[0] = 20
string[1] = purpose number[1] = 40
string[2] = of number[2] = 60
string[3] = this number[3] = 80
string[4] = project number[4] = 100
string[5] = is number[5] = 120
string[6] = to number[6] = 140
string[7] = have number[7] = 160
string[8] = fun number[8] = 180
string[9] = :) number[9] = 200
The purpose of this project is to have fun :)
C Example: File R/W, Strings & ArrayFILE: input.txt
ELRO 1Computational 2Service 3Company 4is 5based 6in 7New 8York 9City. 10
FILE: output.txt
string[0] = ELRO number[0] = 2
string[1] = Computational number[1] = 4
string[2] = Service number[2] = 6
string[3] = Company number[3] = 8
string[4] = is number[4] = 10
string[5] = based number[5] = 12
string[6] = in number[6] = 14
string[7] = New number[7] = 16
string[8] = York number[8] = 18
string[9] = City. number[9] = 20
ELRO Computational Service Company is based in New York City.
Sorting Algorithms
Sorting Algorithms
• Selection Sort I
• Selection Sort 2
• Bubble Sort
• Insertion Sort
Sort Functions1. // This is the main function which can call different sort functions
2.
3. int main(int argc, const char * argv[])
4. {
5. int i, number;
6. int a[20];
7. printf("Number of integers: ");
8. scanf("%d", &number);
9. printf("Enter %d integers: ", number);
10. for (i = 0; i< number; i++)
11. scanf("%d", &a[i]);
12. sort(a, number);13. for (i = 0; i< number; i++)
14. printf("%d ", a[i]);
15. printf("\n");
16. return 0;
17. }
Selection Sort I
• Selection Sort I compares the element in the first position with the
elements in the rest of the array in order.
• Swap them if the first one is greater than any other element in the
array, and result in the smallest element in the first position.
• Find the second smallest element through the same procedure.
• Continue until the array is sorted
Selection Sort I Example
3 5 1 2 4
3 5 1 2 4
1 5 3 2 4
1 5 3 2 4
1 5 3 2 4
1 3 5 2 4
1 2 5 3 4
1 2 5 3 4
1 2 3 5 4
1 2 3 5 4
1 2 3 4 5
1 2 3 4 5
Selection Sort I Code1. // Selection Sort: Compare the elements with the elements in the rest of the
2. // array in order. Swap them until the whole array is sorted.
3.
4. void SelectionSort (int a[], int array_size)
5. {
6. int i, j, temp;
7. for (i = 0; i < array_size-1; i++)
8. for (j = i+1; j < array_size; j++)
9. if (a[i] > a[j])
10. {
11. temp = a[i];
12. a[i] = a[j];
13. a[j] = temp;
14. }
15. }
3 5 1 2 43 5 1 2 41 5 3 2 41 5 3 2 41 5 3 2 41 3 5 2 41 2 5 3 41 2 5 3 41 2 3 5 41 2 3 5 41 2 3 4 51 2 3 4 5
Selection Sort II
• It basically determines the minimum (or maximum) of the list and
swaps it with the element at the index where its supposed to be.
• Find the smallest element in the array.
• Exchange it with the element in the first position.
• Find the second smallest element and exchange it with the element in
the second position.
• Continue until the array is sorted.
Selection Sort II Example
3 5 1 2 4
1 5 3 2 4
1 2 3 5 4
1 2 3 5 4
1 2 3 4 5
1 2 3 4 5
Selection Sort II Code1. // Selection Sort: It basically determines the minimum (or maximum) of the list and
2. // swaps it with the element at the index where its supposed to be.
3.
4. void SelectionSort (int a[], int array_size)
5. {
6. int i;
7. int j, min, temp;
8. for (i = 0; i < array_size - 1; i++)
9. {
10. min = i;
11. for (j = i+1; j < array_size; j++)
12. {
13. if (a[j] < a[min])
14. min = j;
15. }
16. temp = a[i];
17. a[i] = a[min];
18. a[min] = temp;
19. }
20. }
3 5 1 2 4
1 5 3 2 4
1 2 3 5 4
1 2 3 5 4
1 2 3 4 5
1 2 3 4 5
Bubble Sort
• Bubble Sort works by comparing each element of the list with the
element next to it and swapping them if required.
• When we compare pairs of adjacent elements and none are out of
order, the list is sorted.
• If any are out of order, we must have to swap them to get an ordered
list.
• Bubble sort will make passes though the list swapping any adjacent
elements that are out of order.
Bubble Sort
3 5 1 2 4
3 5 1 2 4
3 1 5 2 4
3 1 2 5 4
3 1 2 4 5
1 3 2 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
Bubble Sort Code1. // Bubble Sort: comparing each element of the list with the element
2. // next to it and swapping them if required.
3.
4. void BubbleSort (int a[], int array_size)
5. {
6. int i, j, temp;
7. for (i = 0; i < (array_size - 1); ++i)
8. for (j = 0; j < array_size - 1 - i; ++j )
9. if (a[j] > a[j+1])
10. {
11. temp = a[j+1];
12. a[j+1] = a[j];
13. a[j] = temp;
14. }
15. }
3 5 1 2 4
3 5 1 2 4
3 1 5 2 4
3 1 2 5 4
3 1 2 4 5
1 3 2 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
Insertion Sort
• Insertion Sort starts from the beginning, traverses through the list and
as you find elements misplaced by precedence you remove them and
insert them back into the right position. Eventually what you have is a
sorted list of elements.
• Adding a new element to a sorted list will keep the list sorted if the
element is inserted in the correct place.
• A single element list is sorted.
• Inserting a second element in the proper place keeps the list sorted.
• This is repeated until all the elements have been inserted into the
sorted part of the list.
Insertion Sort
3 5 1 2 4
3 5 1 2 4
1 3 5 2 4
1 2 3 5 4
1 2 3 4 5
Insertion Sort Code1. // Insertion Sort: You start from the beginning, traverse through the list
2. // and as you find elements misplaced by precedence you remove them
3. // and insert them back into the right position.
4.
5. void insertionSort (int a[], int array_size)
6. {
7. int i, j, key;
8. for (i = 1; i < array_size; i++)
9. {
10. key = a[i];
11. for (j = i; j > 0 && a[j-1] > key; j--)
12. a[j] = a[j-1];
13. a[j] = key;
14. }
15. }
3 5 1 2 4
3 5 1 2 4
1 3 5 2 4
1 2 3 5 4
1 2 3 4 5
Searching Algorithms
Searching Algorithms
• Linear Search
• Binary Search
Search Functions1. // This is the main function which can call different search functions
2. #include <stdio.h>
3. int main()
4. {
5. int i, number, key;
6. int a[20];
7. printf("Number of integers: ");
8. scanf("%d", &number);
9. printf("Enter %d integers: ", number);
10. for (i = 0; i< number; i++)
11. scanf("%d", &a[i]);
12. printf("The array of integers:\n");
13. for (i = 0; i< number; i++)
14. printf("%d ", a[i]);
15. printf("\n");
16. printf("Enter your search key: ");
17. scanf("%d", &key);
18. search (key, a, number);19. return 0;
20. }
Linear Search
• Linear Search is the simplest searching algorithm.
• It uses a loop to sequentially step through an array, starting with the
first element.
• It compares each element with the value being searched for and stops
when that value is found or the end of the array is reached.
Linear Search Code1. // Linear Search
2. int LinearSearch (int key, int a[], int array_size)
3. {
4. int i, found = 0;
5. for(i = 0; i < array_size; i++)
6. {
7. if (a[i] == key)
8. {
9. found = 1;
10. printf ("%2d] %2d\n\n", i, a[i]);
11. }
12. }
13. if (found == 1)
14. return 1;
15. else
16. {
17. printf ("Can not find %d\n", key);
18. return -1;
19. }
20. }
Binary Search
• Binary search is much more efficient than the linear search.
• It requires the list to be in order.
• The algorithm starts searching with the middle element.
• If the item is less than the middle element, it starts over searching the
first half of the list.
• If the item is greater than the middle element, the search starts over
starting with the middle element in the second half of the list.
• It then continues halving the list until the item is found.
Binary Search
Binary Search Code1. // Binary Search:
2.
3. int binsearch(int x, int v[], int n)
4. {
5. int low,high,mid;
6. low = 0;
7. high = n - 1;
8. while(low<=high)
9. {
10. mid = (low + high) / 2;
11. if(x < v[mid])
12. {
13. high = mid + 1;
14. }
15. else if(x > v[mid])
16. {
17. low = mid + 1;
18. }
19. else
20. {
21. return mid;
22. }
23. return -1;
24. }
25. }
Q & A