So I'm new to C++ and am needing a little help. All feedback is welcome.
I am suppose to create an AList object and then use that AList object to make the following method calls in order:
#include <iostream>
usingnamespace std;
/*
This program will create an AList object and will then make some method calls.
*/
constint MLS = 50;
typedefint element;
const element SENTINEL = -1;
class AList {
private:
element items [MLS];
int size;
void Swap(int pos1,int pos2);
int Read_element();
public:
void Read();
void Print();
void BubbleSort();
void InsertionSort();
void SelectionSort();
};
int main (){
int a;
AList B;
B.Read();
B.Print();
B.BubbleSort();
B.Print();
B.Read();
B.Print();
B.InsertionSort();
B.Print();
B.Read();
B.Print();
B.SelectionSort();
B.Print();
}
element Read_element() {
element userval;
cout <<"Enter a whole number:";
cin>>userval;
while (!cin.good());
cout<<"invalid choice please enter a whole number";
cin.clear();
cin.ignore(80, '\n');
cin>>userval;
return userval;
}
void AList::Read() {
//PRE: None
//POST: the N.O. Alist is valid
//using elements provided by the user
element userval;
cout<<"Enter elements,";
while ((userval!=SENTINEL)&&(size<MLS)) {
items[size] = userval;
size ++;
}
}
void AList::Print() {
for (int i=0;i<size;i++)
cout<<items[i]<<endl;
}
void AList::BubbleSort(){
//PRE: the N.O. List is void
//Post: the N.O. Alist is unchanged except
//its elements are now in ascending order
for (int i=0; size=-1; i++) {
for (int j=0; j<size-1-i; j++)
if (items[j]>items[j+1])
Swap (j,j+1);
else
;
}
}
void AList::Swap(int pos1,int pos2) {
element temp;
temp = items[pos2];
items[pos2] = items[pos1];
items[pos1] = temp;
}
void AList::InsertionSort() {
//Pre: the N.O. Alist is valid
//Post: the N.O. Alist is unchanged, except that
//its elements are now in ascending order
int j;
bool done;
for (int i = 1; i<size; i++) {
j=i;
done=false;
while ((j>=1)&&(!done))
if (items[j] < items[j-1]){
Swap(j, j-1);
j-=1;
}
else
done = true;
}
}
void AList::SelectionSort() {
int maxpos;
for (int i = size - 1; i > 0; i--) {
maxpos = 0;
for (int j = 1; j <= i; j++)
if (items[j] > items[maxpos])
maxpos = j;
else
;
Swap(maxpos, i);
}
}
I don't think that I'm doing it in the order that needs to be done and I'm also having a problem printing everything. Please help!
I recommend you to edit your post and past all the code again (with proper indenting) and use the code-tags. Just select your (properly indented) code and click the "<>" button next to the input field.
It will add line numbers to your code, so people can refer to it.
For now, I think you should repair the InsertionSort for loop:
- i is not being incremented
- it is an infinate loop
- it is equal to just j=size, but a lot less efficient
In addition, I think you want to fix the else statement in SelectionSort, now swap will always be done.
Finally I would recommend you to use the curly brackets even it they may not be necessary, as they make it obvious what the intended scopes are. Personally I think you left out a couple too many.
I did not try to read the rest because it was too hard without proper formatting.