Lecture 9

Searching and Sorting

List Operations

·       Search for a given item

·       Sort the list

·       Insert item

·       Delete item

·       Print List

 

Sequential Search

int seqSearch(const int list[], int listLength, int searchItem)

[

      int loc;

      bool found=false;

      loc=0;

      while(loc<listLength && !found);

      if (list[loc]==searchItem)

            found=true;

      else

            loc++;

      if (found)

            return loc;

      else

      return)1;

 

Problem when item is at bottom long search

Solution is to sort items in order and then do a quicker search

 

Illustrate how the Bubble Sort (Compare and Swap) algorithm would place the following numbers into order

 

 

 

 

.

                                         Iterations

1

Largest to bottom

2

Next larger

3

Next larger

4

Next larger

 

89 15 15 15 15

           

 

15 15 15 15

 

 

 

    

15 89 78 78 78

      

 

78 78 45 45

     

 

 

     

78 78 89 45 45

            

      

45 45 78 67

           

 

 

           

45 45 45 89 67

                 

            

67  67 67 78

         

 

 

                

67 67 67 67 89

 

 

89 89 89 89

 

 

void bubbleSort(int list[], int length)

{

      int temp;

      int iteration;

      int index;

      for (iteration=1; iteration<length; iteration++)

      {

            for (index=0; index<length-iteration; index++)

                  if (list[index]>list[index+1])

                  {

                        temp=list[index];

                        list[index]=list[index=1];

                        list{index+1]=temp;

                  }

Can now do Binary Search

·       Check midpoint of list

·       Item greater or less then midpoint

·       Remove the non contained half

·       Check again midpoint of retained half

·       Proceed in this manner until found

 

int binarySearch(Const int list[], int listLength, int searchItemJJJJJJ)

{

      int first=0;

      int last=listLength-1;

      int mid;

      bool found=false;

      while(first<=last &&!found)

      {

            mid=(first+last)/2;

            if(list[mid]==searchItem)

                  found=true;

            else if (list[mid>searchItem)

                  last=mid-1;

            else

                  first=mid+1;

      }

      if (found)

            return mid;

      else

            return -1;

}