forked from BitSails/algos
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsort.cpp
More file actions
137 lines (109 loc) · 2.91 KB
/
sort.cpp
File metadata and controls
137 lines (109 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <iostream>
#include <cstdlib>//for "exit()" on some systems
#include <vector>
#include <string>
using namespace std;
/**
\fn linearSearch
\brief Search data for the first occurrence of key
\param [in] key The value being searched for
\param [in] data The data set that will be searched
\returns location of key if found or -1 if not found
*/
int linearSearch(auto data, auto key){
for(int i = 0; i < data.size();i++){
if(data[i] == key)
return i;
}
return -1;
}
int binarySearch(auto data, auto key){
int low = 0;
int high = data.size() - 1;
int mid = (high+low)/2;
while (low <= high){
if(data[mid] == key)
return mid;
if(key < data[mid])
high = mid-1;
else
low = mid+1;
mid = (high+low)/2;
}
return -1;
}
void BubbleSort(auto& data){
for(int i = 0; i < data.size(); i++){
for( int j = 0; j < data.size()-1; j++){
if (data[j] > data[j+1])
swap(data[j], data[j+1]);
}
}
}
void SelectionSort(auto& data){
for (int i = 0; i < data.size(); i++){
int small = i;
for (int j = i+1; j < data.size();j++){
if(data[j] < data[small])
small =j;
}
swap(data[i], data[small]);
}
}
void InsertionSort(auto& data){
for( int i = 0; i < data.size()-1; i++){
int j = i+1;
while( j> 0 and data[j] < data[j-1]){
swap(data[j], data[j-1]);
j= j-1;
}
}
}
int main()
{
vector<string> inputs;
string input, search_key, answer;
int result;
cout<<"Welcome to \"search it\". We first need some input data."<<endl;
cout<<"We'll assume the inputs do not have any spaces."<<endl<<endl;
cout<<"To end input type the #-character (followed by Enter)"<<endl<<endl;
cin>>input;
while(input != "#")//read an unknown number of inputs from keyboard
{
inputs.push_back(input);
cin>>input;
}
cout<<endl<<"["<<inputs.size()<<" values read from input source]"<<endl<<endl;
if(inputs.size() == 0)//no input
{
cout<<endl<<"No input received, quiting..."<<endl<<endl;
exit(1);//nothing to do but quit program
}
cout<<endl<<"To end input type the #-character (followed by Enter)"<<endl<<endl;
cout << "This shall now be sorted" << endl;
BubbleSort(inputs);
for (int i = 0; i < inputs.size(); i++)
{
cout<<inputs[i]<<" , ";
}
cout << "Would you like to perform a search?" << endl;
cin >> answer;
if(answer == "Yes" || answer == "yes"){
cout << "Please input what you'd like to search for" << endl;
cin >> search_key;
while(search_key != "#")//perform searches until sentinel entered
{
result = binarySearch(inputs, search_key);
cout<<" '"<<search_key<<"' was ";
if (result == -1)
cout<<"not found";
else
cout<<"found at index "<<result;
cout<<endl<<endl<<"Enter a value to search for: ";
cin>>search_key;
}
}
else
cout<<endl<<"Program \"sort it\" is now finished."<<endl<<endl;
return 0;
}