SlideShare a Scribd company logo
Write a program to find the number of comparisons using the
binary search and sequential search algorithms as follows:
Suppose list is an array of 1000 elements. Use a random
number generator to fill the list. Use the function inserterd to
initially insert all the elements in the list. You may use the
following function to fill the list: void
fill(orderedArrayListType& list) { int seed = 47; int multiplier
= 2743; int addOn = 5923; while (list.listSize()
Solution
#include <iostream>
#include <cassert>
#include <fstream>
#include "orderedArrayListType.h"
using namespace std;
void part1();
int main() {
part1();
};
void part1()
{
cout << "  
============================|Problem
1|=======================================    "
<< endl;
orderedArrayListType<int> myList =
orderedArrayListType<int>(1000);
myList.fill();
int searchElem;
cout << "Pick an integer to search." << endl;
cin >> searchElem;
//following should print number of comparisons within each
function
//search user input for three
cout << "Sequential search found " << searchElem << " at
" << myList.seqSearch(searchElem) << endl;
cout << "Binary search found " << searchElem << " at "
<< myList.binarySearch(searchElem) << endl;
cout << "Binary with seq search found " << searchElem <<
" at " << myList.binaryWithSeqSearch(searchElem) << endl;
cout << "********************Searching existing number
early at index 250************************** " << endl;
myList.retrieveAt(250, searchElem);
cout << "Sequential search found " << searchElem << " at
" << myList.seqSearch(searchElem) << endl;
cout << "Binary search found " << searchElem << " at "
<< myList.binarySearch(searchElem) << endl;
cout << "Binary with seq search found " << searchElem <<
" at " << myList.binaryWithSeqSearch(searchElem) << endl;
cout << "********************Searching existing number
late at index 750********************************* " <<
endl;
myList.retrieveAt(750, searchElem);
cout << "Sequential search found " << searchElem << " at
" << myList.seqSearch(searchElem) << endl;
cout << "Binary search found " << searchElem << " at "
<< myList.binarySearch(searchElem) << endl;
cout << "Binary with seq search found " << searchElem <<
" at " << myList.binaryWithSeqSearch(searchElem) << endl;
int indexSearch;
cout << "*********************Pick an index to search
for (0-
999)********************************************" <<
endl;
cin >> indexSearch;
myList.retrieveAt(indexSearch, searchElem);
cout << "Sequential search found " << searchElem << " at
" << myList.seqSearch(searchElem) << endl;
cout << "Binary search found " << searchElem << " at "
<< myList.binarySearch(searchElem) << endl;
cout << "Binary with seq search found " << searchElem <<
" at " << myList.binaryWithSeqSearch(searchElem) << endl;
}
orderedArrayListType.h
#ifndef H_OrderedListType
#define H_OrderedListType
#include <iostream>
#include "arrayListType.h"
using namespace std;
template<class elemType>
class orderedArrayListType: public arrayListType<elemType>
{
public:
void insertOrd(const elemType&);
void fill();
int binarySearch(const elemType& item) const;
int binaryWithSeqSearch(const elemType& item)const;
orderedArrayListType(int size = 100);
};
template <class elemType>
void orderedArrayListType<elemType>::insertOrd(const
elemType& item)
{
int first = 0;
int last = length - 1;
int mid;
bool found = false;
if (length == 0) //the list is empty
{
list[0] = item;
length++;
}
else if (length == maxSize)
cerr << "Cannot insert into a full list." << endl;
else
{
while (first <= last && !found)
{
mid = (first + last) / 2;
if (list[mid] == item)
found = true;
else if (list[mid] > item)
last = mid - 1;
else
first = mid + 1;
}//end while
if (found)
cerr << "The insert item is already in the list. "
<< "Duplicates are not allowed." << endl;
else
{
if (list[mid] < item)
mid++;
insertAt(mid, item);
}
}
}//end insertOrd
template<class elemType>
int orderedArrayListType<elemType>::binaryWithSeqSearch
(const elemType& item) const
{
int first = 0;
int last = length - 1;
int mid;
bool found = false;
int count = 0;
while (first <= last && !found)
{
mid = (first + last) / 2;
count++;
if (list[mid] == item)
found = true;
else if (list[mid] > item)
last = mid - 1;
else
first = mid + 1;
//once the partition has reached 15 or below
if (last - first <= 15) {
for (int i = first; i <= last; i++) {
count++;
if (list[i] == item) {
found = true;
break;
}
}
break;
}
}
cout << "Binary search with sequential comparisons: " <<
count << endl;
if (found)
return mid;
else
return -1;
}//end binaryWithSeqSearch
template<class elemType>
int orderedArrayListType<elemType>::binarySearch
(const elemType& item) const
{
int first = 0;
int last = length - 1;
int mid;
bool found = false;
int count = 0;
count = 2;
while (first <= last && !found)
{
mid = (first + last) / 2;
count++;
if (list[mid] == item)
found = true;
else if (list[mid] > item)
last = mid - 1;
else
first = mid + 1;
}
cout << "Binary search comparisons: " << count << endl;
if (found)
return mid;
else
return -1;
}//end binarySearch
template<class elemType>
orderedArrayListType<elemType>::orderedArrayListType(int
size)
: arrayListType<elemType>(size)
{
}
template<class elemType>
void orderedArrayListType<elemType> :: fill()
{
int seed = 47;
int multiplier = 2743;
int addOn = 5923;
while (listSize() < maxListSize())
{
insertOrd(seed);
seed = int((seed * multiplier + addOn) % 100000);
}
}
#endif
arrayListType.h
#ifndef H_arrayListType
#define H_arrayListType
#include <iostream>
#include <cassert>
using namespace std;
template <class elemType>
class arrayListType
{
public:
const arrayListType<elemType>& operator=
(const arrayListType<elemType>&);
//Overloads the assignment operator
bool isEmpty() const;
//Function to determine whether the list is empty
//Postcondition: Returns true if the list is empty;
// otherwise, returns false.
bool isFull() const;
//Function to determine whether the list is full.
//Postcondition: Returns true if the list is full;
// otherwise, returns false.
int listSize() const;
//Function to determine the number of elements in the list
//Postcondition: Returns the value of length.
int maxListSize() const;
//Function to determine the size of the list.
//Postcondition: Returns the value of maxSize.
void print() const;
//Function to output the elements of the list
//Postcondition: Elements of the list are output on the
// standard output device.
bool isItemAtEqual(int location, const elemType& item)
const;
//Function to determine whether the item is the same
//as the item in the list at the position specified by
//Postcondition: Returns true if the list[location]
// is the same as the item; otherwise,
// returns false.
void insertAt(int location, const elemType& insertItem);
//Function to insert an item in the list at the
//position specified by location. The item to be inserted
//is passed as a parameter to the function.
//Postcondition: Starting at location, the elements of the
// list are shifted down, list[location] = insertItem;,
// and length++;. If the list is full or location is
// out of range, an appropriate message is displayed.
void insertEnd(const elemType& insertItem);
//Function to insert an item at the end of the list.
//The parameter insertItem specifies the item to be inserted.
//Postcondition: list[length] = insertItem; and length++;
// If the list is full, an appropriate message is
// displayed.
void removeAt(int location);
//Function to remove the item from the list at the
//position specified by location
//Postcondition: The list element at list[location] is
removed
// and length is decremented by 1. If location is out of
// range,an appropriate message is displayed.
void retrieveAt(int location, elemType& retItem) const;
//Function to retrieve the element from the list at the
//position specified by location.
//Postcondition: retItem = list[location]
// If location is out of range, an appropriate message is
// displayed.
void replaceAt(int location, const elemType& repItem);
//Function to replace the elements in the list at the
//position specified by location. The item to be replaced
//is specified by the parameter repItem.
//Postcondition: list[location] = repItem
// If location is out of range, an appropriate message is
// displayed.
void clearList();
//Function to remove all the elements from the list.
//After this operation, the size of the list is zero.
//Postcondition: length = 0;
int seqSearch(const elemType& item) const;
//Function to search the list for a given item.
//Postcondition: If the item is found, returns the location
// in the array where the item is found; otherwise,
// returns -1.
void insert(const elemType& insertItem);
//Function to insert the item specified by the parameter
//insertItem at the end of the list. However, first the
//list is searched to see whether the item to be inserted
//is already in the list.
//Postcondition: list[length] = insertItem and length++
// If the item is already in the list or the list
// is full, an appropriate message is displayed.
void remove(const elemType& removeItem);
//Function to remove an item from the list. The parameter
//removeItem specifies the item to be removed.
//Postcondition: If removeItem is found in the list,
// it is removed from the list and length is
// decremented by one.
arrayListType(int size = 100);
//constructor
//Creates an array of the size specified by the
//parameter size. The default array size is 100.
//Postcondition: The list points to the array, length = 0,
// and maxSize = size
arrayListType(const arrayListType<elemType>& otherList);
//copy constructor
~arrayListType();
//destructor
//Deallocates the memory occupied by the array.
protected:
elemType *list; //array to hold the list elements
int length; //to store the length of the list
int maxSize; //to store the maximum size of the list
};
template <class elemType>
bool arrayListType<elemType>::isEmpty() const
{
return (length == 0);
}
template <class elemType>
bool arrayListType<elemType>::isFull() const
{
return (length == maxSize);
}
template <class elemType>
int arrayListType<elemType>::listSize() const
{
return length;
}
template <class elemType>
int arrayListType<elemType>::maxListSize() const
{
return maxSize;
}
template <class elemType>
void arrayListType<elemType>::print() const
{
for (int i = 0; i < length; i++)
cout << list[i] << " ";
cout << endl;
}
template <class elemType>
bool arrayListType<elemType>::isItemAtEqual
(int location, const elemType& item) const
{
return(list[location] == item);
}
template <class elemType>
void arrayListType<elemType>::insertAt
(int location, const elemType& insertItem)
{
if (location < 0 || location >= maxSize)
cerr << "The position of the item to be inserted "
<< "is out of range" << endl;
else if (length >= maxSize) //list is full
cerr << "Cannot insert in a full list" << endl;
else
{
for (int i = length; i > location; i--)
list[i] = list[i - 1]; //move the elements down
list[location] = insertItem; //insert the item at the
//specified position
length++; //increment the length
}
} //end insertAt
template <class elemType>
void arrayListType<elemType>::insertEnd(const elemType&
insertItem)
{
if (length >= maxSize) //the list is full
cerr << "Cannot insert in a full list" << endl;
else
{
list[length] = insertItem; //insert the item at the end
length++; //increment the length
}
} //end insertEnd
template <class elemType>
void arrayListType<elemType>::removeAt(int location)
{
if (location < 0 || location >= length)
cerr << "The location of the item to be removed "
<< "is out of range" << endl;
else
{
for (int i = location; i < length - 1; i++)
list[i] = list[i+1];
length--;
}
} //end removeAt
template <class elemType>
void arrayListType<elemType>::retrieveAt
(int location, elemType& retItem) const
{
if (location < 0 || location >= length)
cerr << "The location of the item to be retrieved is "
<< "out of range." << endl;
else
retItem = list[location];
} //end retrieveAt
template <class elemType>
void arrayListType<elemType>::replaceAt
(int location, const elemType& repItem)
{
if (location < 0 || location >= length)
cerr << "The location of the item to be replaced is "
<< "out of range." << endl;
else
list[location] = repItem;
} //end replaceAt
template <class elemType>
void arrayListType<elemType>::clearList()
{
length = 0;
} //end clearList
template <class elemType>
int arrayListType<elemType>::seqSearch(const elemType&
item) const
{
int loc;
bool found = false;
int count = 0;
for (loc = 0; loc < length; loc++) {
count++;
if (list[loc] == item)
{
found = true;
break;
}
}
cout << "Sequential search comparisons" << count << endl;
if (found)
return loc;
else
return -1;
} //end seqSearch
template <class elemType>
void arrayListType<elemType>::insert(const elemType&
insertItem)
{
int loc;
if (length == 0) //list is empty
list[length++] = insertItem; //insert the item and
//increment the length
else if (length == maxSize)
cerr << "Cannot insert in a full list." << endl;
else
{
loc = seqSearch(insertItem);
if (loc == -1) //the item to be inserted
//does not exist in the list
list[length++] = insertItem;
else
cerr << "the item to be inserted is already in "
<< "the list. No duplicates are allowed." << endl;
}
} //end insert
template<class elemType>
void arrayListType<elemType>::remove(const elemType&
removeItem)
{
int loc;
if (length == 0)
cerr << "Cannot delete from an empty list." << endl;
else
{
loc = seqSearch(removeItem);
if (loc != -1)
removeAt(loc);
else
cout << "The item to be deleted is not in the list."
<< endl;
}
} //end remove
template <class elemType>
arrayListType<elemType>::arrayListType(int size)
{
if (size < 0)
{
cerr << "The array size must be positive. Creating "
<< "an array of size 100. " << endl;
maxSize = 100;
}
else
maxSize = size;
length = 0;
list = new elemType[maxSize];
assert(list != NULL);
}
template <class elemType>
arrayListType<elemType>::~arrayListType()
{
delete [] list;
}
template <class elemType>
arrayListType<elemType>::arrayListType
(const arrayListType<elemType>& otherList)
{
maxSize = otherList.maxSize;
length = otherList.length;
list = new elemType[maxSize]; //create the array
assert(list != NULL); //terminate if unable to allocate
//memory space
for (int j = 0; j < length; j++) //copy otherList
list [j] = otherList.list[j];
} //end copy constructor
template <class elemType>
const arrayListType<elemType>&
arrayListType<elemType>::operator=
(const arrayListType<elemType>& otherList)
{
if (this != &otherList) //avoid self-assignment
{
delete [] list;
maxSize = otherList.maxSize;
length = otherList.length;
list = new elemType[maxSize]; //create the array
assert(list != NULL); //if unable to allocate memory
//space, terminate the program
for (int i = 0; i < length; i++)
list[i] = otherList.list[i];
}
return *this;
}
#endif

More Related Content

PPT
DOC
Kalkulus 1
PDF
Pleae help me with this C++ task to the required result by edit or f.pdf
PDF
2.(Sorted list array implementation)This sorted list ADT discussed .pdf
PDF
(Unordered Sets) As explained in this chapter, a set is a collection.pdf
PDF
Using the C++ programming language1. Implement the UnsortedList cl.pdf
DOCX
C++ detyrat postim_slideshare
Kalkulus 1
Pleae help me with this C++ task to the required result by edit or f.pdf
2.(Sorted list array implementation)This sorted list ADT discussed .pdf
(Unordered Sets) As explained in this chapter, a set is a collection.pdf
Using the C++ programming language1. Implement the UnsortedList cl.pdf
C++ detyrat postim_slideshare

Similar to Write a program to find the number of comparisons using the binary se.docx (20)

PDF
Pleae help me with this C++ question, ill upvote thanks.Write the .pdf
PDF
In C++Add the function min as an abstract function to the classar.pdf
PDF
helpInstructionsAdd the function max as an abstract function to .pdf
PDF
BackgroundIn many applications, the composition of a collection o.pdf
PDF
This is the main file include itemh include itemList.pdf
PDF
JAVALAB #8 - ARRAY BASED LISTSThe next exercise is based on this.pdf
PDF
ReversePoem.java ---------------------------------- public cl.pdf
PDF
Complete the provided partial C++ Linked List program. Main.cpp is g.pdf
PDF
Implement the ListArray ADT-Implement the following operations.pdf
PDF
#ifndef LINKED_LIST_ #define LINKED_LIST_ templateclass It.pdf
PDF
Hi,I have added the methods and main class as per your requirement.pdf
DOCX
#ifndef MYLIST_H_ #define MYLIST_H_#includeiostream #include.docx
DOCX
Note- Can someone help me with the private E get(int index- int curren (1).docx
DOCX
Below is a given ArrayList class and Main class Your Dreams Our Mission/tuto...
PDF
Dividing a linked list into two sublists of almost equal sizesa. A.pdf
PDF
All code should be in C++Using the UnsortedList class (UnsortedLis.pdf
PDF
The LinkedList1 class implements a Linked list. class.pdf
DOCX
Write a program that will test a name) method no sorting routine from.docx
PDF
please i need help Im writing a program to test the merge sort alg.pdf
DOCX
Please complete all the code as per instructions in Java programming.docx
Pleae help me with this C++ question, ill upvote thanks.Write the .pdf
In C++Add the function min as an abstract function to the classar.pdf
helpInstructionsAdd the function max as an abstract function to .pdf
BackgroundIn many applications, the composition of a collection o.pdf
This is the main file include itemh include itemList.pdf
JAVALAB #8 - ARRAY BASED LISTSThe next exercise is based on this.pdf
ReversePoem.java ---------------------------------- public cl.pdf
Complete the provided partial C++ Linked List program. Main.cpp is g.pdf
Implement the ListArray ADT-Implement the following operations.pdf
#ifndef LINKED_LIST_ #define LINKED_LIST_ templateclass It.pdf
Hi,I have added the methods and main class as per your requirement.pdf
#ifndef MYLIST_H_ #define MYLIST_H_#includeiostream #include.docx
Note- Can someone help me with the private E get(int index- int curren (1).docx
Below is a given ArrayList class and Main class Your Dreams Our Mission/tuto...
Dividing a linked list into two sublists of almost equal sizesa. A.pdf
All code should be in C++Using the UnsortedList class (UnsortedLis.pdf
The LinkedList1 class implements a Linked list. class.pdf
Write a program that will test a name) method no sorting routine from.docx
please i need help Im writing a program to test the merge sort alg.pdf
Please complete all the code as per instructions in Java programming.docx
Ad

More from ajoy21 (20)

DOCX
Please complete the assignment listed below.Define and explain, us.docx
DOCX
Please cite sources for each question. Do not use the same sources f.docx
DOCX
Please choose one of the following questions to answer for this week.docx
DOCX
Please check the attachment for my paper.Please add citations to a.docx
DOCX
Please answer to this discussion post. No less than 150 words. Refer.docx
DOCX
Please attach Non-nursing theorist summaries.JigsawExecutive .docx
DOCX
Please answer the question .There is no work count. PLEASE NUMBER .docx
DOCX
Please answer the following questions. Please cite your references..docx
DOCX
Please answer the following questions.1.      1.  Are you or.docx
DOCX
Please answer the following question with 200-300 words.Q. Discu.docx
DOCX
Please answer the following question Why do you think the US ha.docx
DOCX
Please answer the following questions. Define tunneling in the V.docx
DOCX
Please answer the following questions1. How can you stimulate the.docx
DOCX
Please answer the following questions very deeply and presicely .docx
DOCX
Please answer the following questions in an informal 1 ½ - 2-page es.docx
DOCX
Please answer the following questions in a response of 150 to 200 wo.docx
DOCX
Please answer these questions regarding the (TILA) Truth in Lending .docx
DOCX
Please answer the following question pertaining to psychology. Inc.docx
DOCX
Please answer the following questions in a response of 250 to 300 .docx
DOCX
Please answer the three questions completly. I have attached the que.docx
Please complete the assignment listed below.Define and explain, us.docx
Please cite sources for each question. Do not use the same sources f.docx
Please choose one of the following questions to answer for this week.docx
Please check the attachment for my paper.Please add citations to a.docx
Please answer to this discussion post. No less than 150 words. Refer.docx
Please attach Non-nursing theorist summaries.JigsawExecutive .docx
Please answer the question .There is no work count. PLEASE NUMBER .docx
Please answer the following questions. Please cite your references..docx
Please answer the following questions.1.      1.  Are you or.docx
Please answer the following question with 200-300 words.Q. Discu.docx
Please answer the following question Why do you think the US ha.docx
Please answer the following questions. Define tunneling in the V.docx
Please answer the following questions1. How can you stimulate the.docx
Please answer the following questions very deeply and presicely .docx
Please answer the following questions in an informal 1 ½ - 2-page es.docx
Please answer the following questions in a response of 150 to 200 wo.docx
Please answer these questions regarding the (TILA) Truth in Lending .docx
Please answer the following question pertaining to psychology. Inc.docx
Please answer the following questions in a response of 250 to 300 .docx
Please answer the three questions completly. I have attached the que.docx
Ad

Recently uploaded (20)

PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
PPTX
Presentation on HIE in infants and its manifestations
PDF
VCE English Exam - Section C Student Revision Booklet
PPTX
Lesson notes of climatology university.
PPTX
Institutional Correction lecture only . . .
PPTX
Cell Types and Its function , kingdom of life
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PDF
Computing-Curriculum for Schools in Ghana
PPTX
Tissue processing ( HISTOPATHOLOGICAL TECHNIQUE
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PDF
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PDF
A GUIDE TO GENETICS FOR UNDERGRADUATE MEDICAL STUDENTS
PDF
GENETICS IN BIOLOGY IN SECONDARY LEVEL FORM 3
PDF
Microbial disease of the cardiovascular and lymphatic systems
PDF
Complications of Minimal Access Surgery at WLH
PDF
Anesthesia in Laparoscopic Surgery in India
STATICS OF THE RIGID BODIES Hibbelers.pdf
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
Presentation on HIE in infants and its manifestations
VCE English Exam - Section C Student Revision Booklet
Lesson notes of climatology university.
Institutional Correction lecture only . . .
Cell Types and Its function , kingdom of life
O5-L3 Freight Transport Ops (International) V1.pdf
Computing-Curriculum for Schools in Ghana
Tissue processing ( HISTOPATHOLOGICAL TECHNIQUE
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
FourierSeries-QuestionsWithAnswers(Part-A).pdf
A GUIDE TO GENETICS FOR UNDERGRADUATE MEDICAL STUDENTS
GENETICS IN BIOLOGY IN SECONDARY LEVEL FORM 3
Microbial disease of the cardiovascular and lymphatic systems
Complications of Minimal Access Surgery at WLH
Anesthesia in Laparoscopic Surgery in India

Write a program to find the number of comparisons using the binary se.docx

  • 1. Write a program to find the number of comparisons using the binary search and sequential search algorithms as follows: Suppose list is an array of 1000 elements. Use a random number generator to fill the list. Use the function inserterd to initially insert all the elements in the list. You may use the following function to fill the list: void fill(orderedArrayListType& list) { int seed = 47; int multiplier = 2743; int addOn = 5923; while (list.listSize() Solution #include <iostream> #include <cassert> #include <fstream> #include "orderedArrayListType.h" using namespace std; void part1(); int main() { part1(); }; void part1()
  • 2. { cout << " ============================|Problem 1|======================================= " << endl; orderedArrayListType<int> myList = orderedArrayListType<int>(1000); myList.fill(); int searchElem; cout << "Pick an integer to search." << endl; cin >> searchElem; //following should print number of comparisons within each function //search user input for three cout << "Sequential search found " << searchElem << " at " << myList.seqSearch(searchElem) << endl; cout << "Binary search found " << searchElem << " at " << myList.binarySearch(searchElem) << endl; cout << "Binary with seq search found " << searchElem << " at " << myList.binaryWithSeqSearch(searchElem) << endl; cout << "********************Searching existing number early at index 250************************** " << endl; myList.retrieveAt(250, searchElem); cout << "Sequential search found " << searchElem << " at
  • 3. " << myList.seqSearch(searchElem) << endl; cout << "Binary search found " << searchElem << " at " << myList.binarySearch(searchElem) << endl; cout << "Binary with seq search found " << searchElem << " at " << myList.binaryWithSeqSearch(searchElem) << endl; cout << "********************Searching existing number late at index 750********************************* " << endl; myList.retrieveAt(750, searchElem); cout << "Sequential search found " << searchElem << " at " << myList.seqSearch(searchElem) << endl; cout << "Binary search found " << searchElem << " at " << myList.binarySearch(searchElem) << endl; cout << "Binary with seq search found " << searchElem << " at " << myList.binaryWithSeqSearch(searchElem) << endl; int indexSearch; cout << "*********************Pick an index to search for (0- 999)********************************************" << endl; cin >> indexSearch; myList.retrieveAt(indexSearch, searchElem); cout << "Sequential search found " << searchElem << " at " << myList.seqSearch(searchElem) << endl; cout << "Binary search found " << searchElem << " at "
  • 4. << myList.binarySearch(searchElem) << endl; cout << "Binary with seq search found " << searchElem << " at " << myList.binaryWithSeqSearch(searchElem) << endl; } orderedArrayListType.h #ifndef H_OrderedListType #define H_OrderedListType #include <iostream> #include "arrayListType.h" using namespace std; template<class elemType> class orderedArrayListType: public arrayListType<elemType> { public: void insertOrd(const elemType&); void fill(); int binarySearch(const elemType& item) const; int binaryWithSeqSearch(const elemType& item)const; orderedArrayListType(int size = 100); }; template <class elemType> void orderedArrayListType<elemType>::insertOrd(const
  • 5. elemType& item) { int first = 0; int last = length - 1; int mid; bool found = false; if (length == 0) //the list is empty { list[0] = item; length++; } else if (length == maxSize) cerr << "Cannot insert into a full list." << endl; else { while (first <= last && !found) { mid = (first + last) / 2; if (list[mid] == item) found = true; else if (list[mid] > item) last = mid - 1; else first = mid + 1; }//end while
  • 6. if (found) cerr << "The insert item is already in the list. " << "Duplicates are not allowed." << endl; else { if (list[mid] < item) mid++; insertAt(mid, item); } } }//end insertOrd template<class elemType> int orderedArrayListType<elemType>::binaryWithSeqSearch (const elemType& item) const { int first = 0; int last = length - 1; int mid; bool found = false; int count = 0; while (first <= last && !found) { mid = (first + last) / 2; count++;
  • 7. if (list[mid] == item) found = true; else if (list[mid] > item) last = mid - 1; else first = mid + 1; //once the partition has reached 15 or below if (last - first <= 15) { for (int i = first; i <= last; i++) { count++; if (list[i] == item) { found = true; break; } } break; } } cout << "Binary search with sequential comparisons: " << count << endl; if (found) return mid; else return -1;
  • 8. }//end binaryWithSeqSearch template<class elemType> int orderedArrayListType<elemType>::binarySearch (const elemType& item) const { int first = 0; int last = length - 1; int mid; bool found = false; int count = 0; count = 2; while (first <= last && !found) { mid = (first + last) / 2; count++; if (list[mid] == item) found = true; else if (list[mid] > item) last = mid - 1; else first = mid + 1; } cout << "Binary search comparisons: " << count << endl;
  • 9. if (found) return mid; else return -1; }//end binarySearch template<class elemType> orderedArrayListType<elemType>::orderedArrayListType(int size) : arrayListType<elemType>(size) { } template<class elemType> void orderedArrayListType<elemType> :: fill() { int seed = 47; int multiplier = 2743; int addOn = 5923; while (listSize() < maxListSize()) { insertOrd(seed); seed = int((seed * multiplier + addOn) % 100000); } } #endif
  • 10. arrayListType.h #ifndef H_arrayListType #define H_arrayListType #include <iostream> #include <cassert> using namespace std; template <class elemType> class arrayListType { public: const arrayListType<elemType>& operator= (const arrayListType<elemType>&); //Overloads the assignment operator bool isEmpty() const; //Function to determine whether the list is empty //Postcondition: Returns true if the list is empty; // otherwise, returns false. bool isFull() const; //Function to determine whether the list is full. //Postcondition: Returns true if the list is full; // otherwise, returns false. int listSize() const; //Function to determine the number of elements in the list
  • 11. //Postcondition: Returns the value of length. int maxListSize() const; //Function to determine the size of the list. //Postcondition: Returns the value of maxSize. void print() const; //Function to output the elements of the list //Postcondition: Elements of the list are output on the // standard output device. bool isItemAtEqual(int location, const elemType& item) const; //Function to determine whether the item is the same //as the item in the list at the position specified by //Postcondition: Returns true if the list[location] // is the same as the item; otherwise, // returns false. void insertAt(int location, const elemType& insertItem); //Function to insert an item in the list at the //position specified by location. The item to be inserted //is passed as a parameter to the function. //Postcondition: Starting at location, the elements of the // list are shifted down, list[location] = insertItem;, // and length++;. If the list is full or location is // out of range, an appropriate message is displayed. void insertEnd(const elemType& insertItem); //Function to insert an item at the end of the list.
  • 12. //The parameter insertItem specifies the item to be inserted. //Postcondition: list[length] = insertItem; and length++; // If the list is full, an appropriate message is // displayed. void removeAt(int location); //Function to remove the item from the list at the //position specified by location //Postcondition: The list element at list[location] is removed // and length is decremented by 1. If location is out of // range,an appropriate message is displayed. void retrieveAt(int location, elemType& retItem) const; //Function to retrieve the element from the list at the //position specified by location. //Postcondition: retItem = list[location] // If location is out of range, an appropriate message is // displayed. void replaceAt(int location, const elemType& repItem); //Function to replace the elements in the list at the //position specified by location. The item to be replaced //is specified by the parameter repItem. //Postcondition: list[location] = repItem // If location is out of range, an appropriate message is // displayed. void clearList();
  • 13. //Function to remove all the elements from the list. //After this operation, the size of the list is zero. //Postcondition: length = 0; int seqSearch(const elemType& item) const; //Function to search the list for a given item. //Postcondition: If the item is found, returns the location // in the array where the item is found; otherwise, // returns -1. void insert(const elemType& insertItem); //Function to insert the item specified by the parameter //insertItem at the end of the list. However, first the //list is searched to see whether the item to be inserted //is already in the list. //Postcondition: list[length] = insertItem and length++ // If the item is already in the list or the list // is full, an appropriate message is displayed. void remove(const elemType& removeItem); //Function to remove an item from the list. The parameter //removeItem specifies the item to be removed. //Postcondition: If removeItem is found in the list, // it is removed from the list and length is // decremented by one. arrayListType(int size = 100); //constructor //Creates an array of the size specified by the
  • 14. //parameter size. The default array size is 100. //Postcondition: The list points to the array, length = 0, // and maxSize = size arrayListType(const arrayListType<elemType>& otherList); //copy constructor ~arrayListType(); //destructor //Deallocates the memory occupied by the array. protected: elemType *list; //array to hold the list elements int length; //to store the length of the list int maxSize; //to store the maximum size of the list }; template <class elemType> bool arrayListType<elemType>::isEmpty() const { return (length == 0); } template <class elemType> bool arrayListType<elemType>::isFull() const { return (length == maxSize); } template <class elemType>
  • 15. int arrayListType<elemType>::listSize() const { return length; } template <class elemType> int arrayListType<elemType>::maxListSize() const { return maxSize; } template <class elemType> void arrayListType<elemType>::print() const { for (int i = 0; i < length; i++) cout << list[i] << " "; cout << endl; } template <class elemType> bool arrayListType<elemType>::isItemAtEqual (int location, const elemType& item) const { return(list[location] == item); } template <class elemType> void arrayListType<elemType>::insertAt (int location, const elemType& insertItem)
  • 16. { if (location < 0 || location >= maxSize) cerr << "The position of the item to be inserted " << "is out of range" << endl; else if (length >= maxSize) //list is full cerr << "Cannot insert in a full list" << endl; else { for (int i = length; i > location; i--) list[i] = list[i - 1]; //move the elements down list[location] = insertItem; //insert the item at the //specified position length++; //increment the length } } //end insertAt template <class elemType> void arrayListType<elemType>::insertEnd(const elemType& insertItem) { if (length >= maxSize) //the list is full cerr << "Cannot insert in a full list" << endl; else { list[length] = insertItem; //insert the item at the end length++; //increment the length
  • 17. } } //end insertEnd template <class elemType> void arrayListType<elemType>::removeAt(int location) { if (location < 0 || location >= length) cerr << "The location of the item to be removed " << "is out of range" << endl; else { for (int i = location; i < length - 1; i++) list[i] = list[i+1]; length--; } } //end removeAt template <class elemType> void arrayListType<elemType>::retrieveAt (int location, elemType& retItem) const { if (location < 0 || location >= length) cerr << "The location of the item to be retrieved is " << "out of range." << endl; else retItem = list[location]; } //end retrieveAt
  • 18. template <class elemType> void arrayListType<elemType>::replaceAt (int location, const elemType& repItem) { if (location < 0 || location >= length) cerr << "The location of the item to be replaced is " << "out of range." << endl; else list[location] = repItem; } //end replaceAt template <class elemType> void arrayListType<elemType>::clearList() { length = 0; } //end clearList template <class elemType> int arrayListType<elemType>::seqSearch(const elemType& item) const { int loc; bool found = false; int count = 0; for (loc = 0; loc < length; loc++) { count++;
  • 19. if (list[loc] == item) { found = true; break; } } cout << "Sequential search comparisons" << count << endl; if (found) return loc; else return -1; } //end seqSearch template <class elemType> void arrayListType<elemType>::insert(const elemType& insertItem) { int loc; if (length == 0) //list is empty list[length++] = insertItem; //insert the item and //increment the length else if (length == maxSize) cerr << "Cannot insert in a full list." << endl; else { loc = seqSearch(insertItem);
  • 20. if (loc == -1) //the item to be inserted //does not exist in the list list[length++] = insertItem; else cerr << "the item to be inserted is already in " << "the list. No duplicates are allowed." << endl; } } //end insert template<class elemType> void arrayListType<elemType>::remove(const elemType& removeItem) { int loc; if (length == 0) cerr << "Cannot delete from an empty list." << endl; else { loc = seqSearch(removeItem); if (loc != -1) removeAt(loc); else cout << "The item to be deleted is not in the list." << endl; } } //end remove
  • 21. template <class elemType> arrayListType<elemType>::arrayListType(int size) { if (size < 0) { cerr << "The array size must be positive. Creating " << "an array of size 100. " << endl; maxSize = 100; } else maxSize = size; length = 0; list = new elemType[maxSize]; assert(list != NULL); } template <class elemType> arrayListType<elemType>::~arrayListType() { delete [] list; } template <class elemType> arrayListType<elemType>::arrayListType (const arrayListType<elemType>& otherList) {
  • 22. maxSize = otherList.maxSize; length = otherList.length; list = new elemType[maxSize]; //create the array assert(list != NULL); //terminate if unable to allocate //memory space for (int j = 0; j < length; j++) //copy otherList list [j] = otherList.list[j]; } //end copy constructor template <class elemType> const arrayListType<elemType>& arrayListType<elemType>::operator= (const arrayListType<elemType>& otherList) { if (this != &otherList) //avoid self-assignment { delete [] list; maxSize = otherList.maxSize; length = otherList.length; list = new elemType[maxSize]; //create the array assert(list != NULL); //if unable to allocate memory //space, terminate the program for (int i = 0; i < length; i++) list[i] = otherList.list[i]; }