c# programming searching & sorting. objective/essential standard essential standard 3.00 apply...

28
C# PROGRAMMING Searching & Sorting

Upload: marianna-patterson

Post on 01-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

C# PROGRAMMING

Searching & Sorting

Objective/Essential Standard

Essential Standard 3.00 Apply Advanced Properties of Arrays

Indicator 3.03 Apply procedures to sort and search arrays. (6%)

Searching vs. Sorting

When you search an array, it is to determine if a specified value is present. There are two primary searching algorithms

1. Linear Search2. Binary Search

Sorting is done to order the values in the array based upon some key value. There are three primary sorting algorithms

1. Selection Sort2. Insertion Sort3. Merge Sort

C# PROGRAMMING

Searching Algorithms

Linear Search

A linear search algorithm searches the array in a sequential manner.

The algorithm moves through the array, comparing the key value with the values of the elements. If it does not find the key value, it simply moves to the next element.

5 8 6 1 2 7 3intArray

0 1 2 3 4 5 6

Linear Search

for (int index = 0; index < intArray.Length; index++){ if (array [index] == searchValue) return index;

return -1;}

Note: The Loop will iterate until the value is found or it reaches the end.

Binary Search

The binary search algorithm is more efficient than the linear search algorithm.

Binary search requires that the array be sorted first.

The algorithm splits the array and checks the middle value. If it is not found it compares the values. If the search value is higher than the middle value, the

algorithm moves to the upper half (now a subarray). (Lower – it moves to the lower half.

It splits the subarray in half, checks the middle for a match. If not found, it checks to see if it is higher/lower and moves to

appropriate subarray. This continues until it has no more values or finds a match.

Binary Search

Binary Search Code

int low = 0; //starts with beginning position at 0

int high = arr.Length – 1; //starts with end position at last elementint mid = (low + high + 1)/2; //calculates middle positionint index = -1; //sets index to -1, not found at

beginningdo{

if (searchVal == arr[mid]) //checks middle index = mid;else if (searchVal < arr[mid]) //sets subarray if searchVal < mid high = mid – 1;else if (searchVal > arr[mid]) //sets subarray if searchVal > mid low = mid + 1;

mid = (low + high + 1)/2; //recalculate middle value} while ((low <= high) && (index ==-1)) //continues loop while not found

return index;

C# PROGRAMMING

Sorting Algorithms

Selection Sort

This is a simple sorting algorithm.

It moves through the array looking for the lowest value, then moves it to the front.

The second pass through the array, it looks for the second lowest and moves it to the second position.

It keeps passing through the array until the last iteration.

Selection Sort

5 4 8 1 3

1 4 8 5 3

1 3 8 5 4

1 3 4 5 8

1 3 4 5 8

Selection Sort

int smallestVal;

for ( int i = 0; i < arrName.Length – 1; i++){ smallestVal = i;

for ( int index = i + 1; index < arrName.Length; index ++){

if ( arrName [ index ] < arrName [ smallestVal ])smallestVal = index;

int temp = arrName [ i ];data [ i ] = data [ smallestVal ];data [ smallestVal ] = temp;

}}

Insertion Sort

Another simple sorting algorithm.

1st Iteration – Compares element 1 & 2 – Swaps if element 1 > element 2.

2nd Iteration – Looks at element 3 – Inserts it in position given element 1 & 2.

It keeps comparing and inserting until the end.

1 4 3 5 8

1 4 5 3 8

1 4 5 8 3

4 1 5 8 3

4 5 1 8 3

4 5 8 1 3

Insertion Sort

5 4 8 1 3

4 5 8 1 3

1 3 4 5 8

1 3 4 5 8

Insertion Sort

arr = new int [size];int insertVal;

for(int next = 1; next < arr.Length; next ++){insertVal = arr[next]; //hold valueint move = next; //initialize index pos to put elementwhile (move > 0 && arr [move – 1] > insert){

arr [move ] = arr [move – 1];move --;

}arr [move] = insertVal; //insert value

}

Merge Sort

The merge sort algorithm sorts the array by splitting the array into two subarrays, sorting the subarrays, then merging them back together sorted.

56 18 65 17 35 29 44

56 18 65 17 35 29 44

56 18 65 17 35 29 44

56 18 65 4417 35 29

18 56 17 65 29 35 44

17 18 56 65 29 35 44

17 18 29 35 44 56 65

Measuring Efficiency

How efficiency an algorithm is can be measured using Big-O notation.

Big-O notation measure the worst-case runtime for an algorithm.

Array Class

There are methods in the Array class that can be used to search and sort an array.

You can sort an array in ascending order as follows

Array.Sort(arrName);

You can sort an array in descending order as well.

Array.Reverse(arrName);

Array Class

You can also use the BinarySearch method to perform a binary search. Remember the array has to be sorted first. This method returns the index position of the found

item, if not found, -1.

Example

intPosition = Array.BinarySearch(arrName, search);

ArrayList Class

There are methods in the ArrayList class that can be used to search and sort an ArrayList.

You can sort an array in ascending order as follows

ArrListName.Sort();

You can sort an ArrayList in descending order as well.

ArrListName.Reverse();

ArrayList Class

You can also use the BinarySearch method to perform a binary search with an ArrayList. Remember the ArrayList has to be sorted first. This method returns the index position of the found

item, if not found, -1.

Example

intIndex = ArrListName.BinarySearch(searchObj);

Check Your Understanding

Given the following code, what will be the content of the array after execution?

ArrayList Treasure = new ArrayList(); HealthItem Potion= new HealthItem (5); HealthItem Life= new HealthItem (10); chest.Add(Potion); chest.Add(Potion); chest.Add(Life); chest.Remove(Potion); chest.Reverse();

Potion, Life

Check Your Understanding

Given the following code, what will be the value of Location after execution?

ArrayList Treasure = new ArrayList(); HealthItem Potion= new HealthItem (5); HealthItem Life= new HealthItem (10); Treasure.Add(Potion); Treasure.Add(Potion); Treasure.Add(Life); Treasure.Remove(Potion);

int Location = Treasure.BinarySearch(Life);Location = 1

Check Your Understanding

Given the following code, what will be the value of Location after execution?

ArrayList Treasure = new ArrayList(); HealthItem Potion= new HealthItem (5); HealthItem Life= new HealthItem (10); Treasure.Add(Potion); Treasure.Add(Potion); Treasure.Add(Life); Treasure.Remove(Potion);

int Location = Treasure.BinarySearch(Heart);Location = -1

Check Your Understanding

Given the following code, what will be the contents of the array myHealth after execution?

intPlayerPoints = new int [] {451, 249, -377} Array.Sort(intPlayerPoints);

-377, 249, 451

Check Your Understanding

Given the following code, what will be the value of result after execution?

int myLevelPoints = new int [] {203, 478, 1785} Array.Sort(myLevelPoints ); int result = Array.BinarySearch(myLevelPoints , 1785);

2

Check Your Understanding

Given the following code, what would be the values in the sub-arrays after the second iteration using a MergeSort?

int myLevels = new int [] {211, 103, 15, 49, 73, 172}

210 103 15 49 73 172 //first 210 103 15 49 73 172 //second

Searching & Sorting

For more information on the Array class. http://msdn.microsoft.com/en-us/library/czz5hkty.aspx

For more information on the ArrayList class. http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx