Question
need pseudocode for the below code // forward declarations double strToDouble(string str, char ch); // define a structure to hold bid information struct Bid {
need pseudocode for the below code
// forward declarations double strToDouble(string str, char ch);
// define a structure to hold bid information struct Bid { string bidId; // unique identifier string title; string fund; double amount; Bid() { amount = 0.0; } };
//============================================================================ // Static methods used for testing //============================================================================
/** * Display the bid information to the console (std::out) * * @param bid struct containing the bid info */ void displayBid(Bid bid) { cout << bid.bidId << ": " << bid.title << " | " << bid.amount << " | " << bid.fund << endl; return; }
/** * Prompt user for bid information using console (std::in) * * @return Bid struct containing the bid info */ Bid getBid() { Bid bid;
cout << "Enter Id: "; cin.ignore(); getline(cin, bid.bidId);
cout << "Enter title: "; getline(cin, bid.title);
cout << "Enter fund: "; cin >> bid.fund;
cout << "Enter amount: "; cin.ignore(); string strAmount; getline(cin, strAmount); bid.amount = strToDouble(strAmount, '$');
return bid; }
/** * Load a CSV file containing bids into a container * * @param csvPath the path to the CSV file to load * @return a container holding all the bids read */ vector
// Define a vector data structure to hold a collection of bids. vector
// initialize the CSV Parser using the given path csv::Parser file = csv::Parser(csvPath);
try { // loop to read rows of a CSV file for (int i = 0; i < file.rowCount(); i++) {
// Create a data structure and add to the collection of bids Bid bid; bid.bidId = file[i][1]; bid.title = file[i][0]; bid.fund = file[i][8]; bid.amount = strToDouble(file[i][4], '$');
//cout << "Item: " << bid.title << ", Fund: " << bid.fund << ", Amount: " << bid.amount << endl;
// push this bid to the end bids.push_back(bid); } } catch (csv::Error &e) { std::cerr << e.what() << std::endl; } return bids; }
// FIXME (2a): Implement the quick sort logic over bid.title
/** * Partition the vector of bids into two parts, low and high * * @param bids Address of the vector
// middle point int mid = begin + (end - begin) / 2;
bool complete = false;
while(!complete) {
// increment the low if it is less than mid point while (bids.at(low).title.compare(bids.at(mid).title) < 0) { low++; }
// decrement the high if it is less than mid while (bids.at(mid).title.compare(bids.at(high).title) < 0) { high--; }
// at this points sorting is complete mark the complete to true swap otherwise if (low >= high) { complete = !complete; } else { swap(bids.at(low), bids.at(high)); // move the points low++; high--; }
}
return high; }
/** * Perform a quick sort on bid title * Average performance: O(n log(n)) * Worst case performance O(n^2)) * * @param bids address of the vector
mid = partition(bids, begin, end);
// make a recursive call for the first partition quickSort(bids, begin, mid);
// make a recursive call for the second partition quickSort(bids, mid+1, end);
}
// FIXME (1a): Implement the selection sort logic over bid.title
/** * Perform a selection sort on bid title * Average performance: O(n^2)) * Worst case performance O(n^2)) * * @param bid address of the vector
int minimum; // Declare the minimum // Declare the outer loop for (unsigned int currentPosition = 0; currentPosition < bids.size(); ++currentPosition) { // Set min to currentPosition minimum = currentPosition; // If the next title is alphabetically less than the current set the new minimum to the the current for (unsigned int i = currentPosition + 1; i < bids.size(); ++i) { string currentTitle = bids.at(i).title; string titleAtMin = bids.at(minimum).title; if(currentTitle.compare(titleAtMin) < 0) { minimum = i; } }
// If the minimum and currentPosition are not same // We know we need to swap it so do it if (minimum != currentPosition) { swap(bids.at(currentPosition), bids.at(minimum)); }
} }
/** * Simple C function to convert a string to a double * after stripping out unwanted char * * credit: http://stackoverflow.com/a/24875936 * * @param ch The character to strip out */ double strToDouble(string str, char ch) { str.erase(remove(str.begin(), str.end(), ch), str.end()); return atof(str.c_str()); }
/** * The one and only main() method */ int main(int argc, char* argv[]) {
// process command line arguments string csvPath; switch (argc) { case 2: csvPath = argv[1]; break; default: csvPath = "eBid_Monthly_Sales_Dec_2016.csv"; }
// Define a vector to hold all the bids vector
// Define a timer variable clock_t ticks;
int choice = 0; while (choice != 9) { cout << "Menu:" << endl; cout << " 1. Load Bids" << endl; cout << " 2. Display All Bids" << endl; cout << " 3. Selection Sort All Bids" << endl; cout << " 4. Quick Sort All Bids" << endl; cout << " 9. Exit" << endl; cout << "Enter choice: "; cin >> choice;
switch (choice) {
case 1: // Initialize a timer variable before loading bids ticks = clock();
// Complete the method call to load the bids bids = loadBids(csvPath);
cout << bids.size() << " bids read" << endl;
// Calculate elapsed time and display result ticks = clock() - ticks; // current clock ticks minus starting clock ticks cout << "time: " << ticks << " clock ticks" << endl; cout << "time: " << ticks * 1.0 / CLOCKS_PER_SEC << " seconds" << endl;
break;
case 2: // Loop and display the bids read for (int i = 0; i < bids.size(); ++i) { displayBid(bids[i]); } cout << endl;
break;
// FIXME (1b): Invoke the selection sort and report timing results case 3: // Initialize a timer variable before loading bids ticks = clock();
// Complete the method call to load the bids selectionSort(bids);
cout << bids.size() << " bids read" << endl;
// Calculate elapsed time and display result ticks = clock() - ticks; // current clock ticks minus starting clock ticks cout << "time: " << ticks << " clock ticks" << endl; cout << "time: " << ticks * 1.0 / CLOCKS_PER_SEC << " seconds" << endl;
break;
// FIXME (2b): Invoke the quick sort and report timing results case 4: // Initialize a timer variable before loading bids ticks = clock();
// Complete the method call to load the bids quickSort(bids, 0, bids.size() - 1);
cout << bids.size() << " bids read" << endl;
// Calculate elapsed time and display result ticks = clock() - ticks; // current clock ticks minus starting clock ticks cout << "time: " << ticks << " clock ticks" << endl; cout << "time: " << ticks * 1.0 / CLOCKS_PER_SEC << " seconds" << endl;
break;
} }
cout << "Good bye." << endl;
return 0; }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started