0% found this document useful (0 votes)
23 views3 pages

Searching Algorithms CIIC 4020

The document contains C++ code implementing various sorting and searching algorithms on vectors of integers. It includes functions for linear search, binary search, selection sort, insertion sort, and merge sort. The binary search function requires the vector to be sorted. The merge sort function recursively splits the vector in half, sorts each half, and then merges the halves back together.

Uploaded by

kapapa9579
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views3 pages

Searching Algorithms CIIC 4020

The document contains C++ code implementing various sorting and searching algorithms on vectors of integers. It includes functions for linear search, binary search, selection sort, insertion sort, and merge sort. The binary search function requires the vector to be sorted. The merge sort function recursively splits the vector in half, sorts each half, and then merges the halves back together.

Uploaded by

kapapa9579
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

#include <iostream>

#include <vector>
#include <algorithm>

using namespace std;

/* Returns the position of the key within the vector.


* Returns -1 if key not found.
*/
int linearSearch(vector<int> numbers, int key) {
for (int i=0; i<numbers.size(); i++) {
if (numbers[i] == key) return i;
}
return -1;
}

/* Returns the position of the key within the vector.


* Returns -1 if key not found.
* REQUIRES VECTOR TO BE SORTED*/
int binarySearchHelper(vector<int> numbers, int key, int start, int end) {

if (start > end) return -1;


if (start == end) {
if (numbers[start] == key) {
return start;
} else {
return -1;
}
}
int mid = (start + end) / 2;

if (numbers[mid] == key) return mid;


if (numbers[mid] < key) return binarySearchHelper(numbers, key, mid + 1, end);
return binarySearchHelper(numbers, key, start, mid -1);

int binarySearch(vector<int> numbers, int key) {

return binarySearchHelper(numbers, key, 0, numbers.size()-1);

}
void selectionSort(vector<int> &numbers) {

for (int i=0; i<numbers.size()-1; i++) {


int minPos = i;
for (int j=i; j<numbers.size(); j++) {
if (numbers[j] < numbers[minPos]) {
minPos = j;
}
}
// Swap ith with minPos
int temp = numbers[i];
numbers[i] = numbers[minPos];
numbers[minPos] = temp;
}

void insertionSort(vector<int> &numbers) {

for (int i=1; i<numbers.size(); i++) {


int j=i;
while ((j>0) && (numbers[j] < numbers[j-1])) {
int temp = numbers[j];
numbers[j] = numbers[j-1];
numbers[j-1] = temp;
j--;
}
}

}
void merge(vector<int> left, vector<int> right, vector<int> &result) {

int i=0;
int j=0;
int k=0;
while ((i<left.size()) && (j<right.size())) {
if (left[i] < right[j]) {
result[k] = left[i];
i++;
} else {
result[k] = right[j];
j++;
}
k++;
}
while (i<left.size()) {
result[k] = left[i];
i++; k++;
}
while (j<right.size()) {
result[k] = right[j];
j++; k++;
}

void mergeSort(vector<int> &numbers) {

if (numbers.size() <=1) return;


int mid = numbers.size() / 2;
vector<int> leftHalf;
for (int i = 0; i<mid; i++) {
leftHalf.push_back(numbers[i]);
}
mergeSort(leftHalf);
vector<int> rightHalf;
for (int i=mid; i<numbers.size(); i++) {
rightHalf.push_back(numbers[i]);
}
mergeSort(rightHalf);
merge(leftHalf, rightHalf, numbers);

You might also like