sorting - C++: Why is the created vector not passing to the next set of for loops? -
i have user defines size of vector , vector filled. vector sorted using bubble sort (homework assignment). however, when "sorted" vector displayed, there different numbers in in original creation. how first create vector, display it, sort , display it??
#include <iostream> #include <vector> #include <cmath> #include <numeric> using namespace std; int main() { int n; double average=0.0; int median = 0; double size = 0.0; int i=0; cout<<"vector length?: "<<endl; cin>>n; vector<int> data; srand(time(null)); //filling vector (int i=0; i<n; i++) { data.push_back(rand()%10+1); } (int i=0; i<data.size(); i++) { cout<<"vector: "<< data[i]<<endl; } size = data.size(); //sorting void bubblesort(vector<int> & data); { (int k = 1; k < size; k++) { (int = 0; i<size -1 - k; i++) { if (data[i] > data[i +1]) { int temp = data[i]; data[i] = data[i + 1]; data[i + 1] = temp; } cout<<"sorted vector: "<< data[i]<<endl; } } }
first off:
- make sure include necessary header files, e.g.
stdlib.husedrand()function. - get rid of unused variables,
average,median,size. - declare
bubblesortfunction outside ofmainfunction, , add additional checkup code prevent sort if list has not more 1 element.
the sort problem related code snippet of yours:
for (int = 0; i<size -1 - k; i++) { ... } simply remove -1
to fix sort problem, , better output, use following code:
#include <iostream> #include <stdlib.h> #include <vector> #include <cmath> using namespace std; void bubblesort(vector<int>& data) { if(data.size() <= 1) return; for(int i=1; i<data.size(); i++) { for(int j=0; j<data.size()-i; j++) { if(data.at(j) > data.at(j+1)) { int temp = data.at(j+1); data.at(j+1) = data.at(j); data.at(j) = temp; } } } } int main() { int n; vector<int> data; cout << "vector length?: "; cin >> n; // filling vector for(int i=0; i<n; i++) data.push_back(rand()%10+1); cout << "vector: "; for(int i=0; i<data.size(); i++) cout << data.at(i) << ", "; // sorting bubblesort(data); cout << endl << "sorted vector: "; for(int i=0; i<data.size(); i++) cout << data.at(i) << ", "; return 0; } hope helps ;)
Comments
Post a Comment