# Thread: Sorting Array Help

1. ## Sorting Array Help

Hi, i have this much of my program done and it works and everything but i still missing a few things. I was wondering how do i get the mode of my array? And i need to write this program using a different kind or sorting technique different from the three i have used already. Can you help me please? Thanks

Code:
```#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

void bubbleSort();
void selectionSort();
void insertionSort();

int main(int argc, char *argv[])

{
int sort;

do
{
cout << "Select a sort to run: \n";
cout << "\t1: Bubble sort\n";
cout << "\t2: Selection sort\n";
cout << "\t3: Insertion sort\n";
cout << "\t0: Exit\n";
cin >> sort;
system("cls");

if (sort==1)          bubbleSort();
else if (sort==2)     selectionSort();
else if (sort==3)     insertionSort();

} while (sort != 0);

system("PAUSE");
return EXIT_SUCCESS;
}

void bubbleSort()

{   srand ((unsigned) time(NULL));
int size;
int main();
cout << "Array Size: "<<endl;
cin >> size;
system("cls");
cout << "Array Size: " << size <<endl<<endl;
int tosort[size];
for (int i=0;i<size;i++)
{
int x = (rand() %100);
tosort [i] = x;
cout << x << " " ;
}
cout<<endl;

int tmp;

for (int y=0; y < size; y++)
{
for (int x=0; x < size; x++)
{
if(tosort[x] > tosort[x+1])
{
tmp = tosort[x];
tosort[x] = tosort[x+1];
tosort[x+1] = tmp;
}
cout << tosort[x] << " ";
}

cout << endl;
}

double mean = 0, median = 0, mode= 0,;
float dev=0;
double sum, sum2;
for (int meancount=0; meancount<size; meancount++)
{
sum=sum + tosort[meancount];
sum2=sum2 + tosort[meancount]*tosort[meancount];
}
double tot;
int med=size/2;
mean = sum/size;
dev = (sum2 - size*mean*mean);
tot= sqrt( dev /size);
cout <<endl<<endl<< "Mean: " << mean <<endl;
cout <<"Range: " << abs( tosort[0] - tosort[size-1]) <<endl;
cout <<"Sum: " << sum << endl;

if (size % 2 ==0)
{
double ave=0;
ave= tosort[med-1] + tosort[med];
double final=0;
final = ave/2;
cout << "Median: " << final << endl;
}
else
{ cout << "Median: " << tosort[ med ] << endl; }

cout << "Standard Deviation: " <<tot << endl;

system("pause");
system("cls");
main();
}
void selectionSort()

{
srand ((unsigned) time(NULL));
int size;
cout << "Array Size: ";
cin >> size;
cout << endl;
int tosort[size];
for (int i=0;i<size;i++)
{
int x = (rand() %100);
tosort [i] = x;
cout << x << " " ;
}
cout<<endl;
int minimum, tmp;

for (int r = 0; r < size; r++)
{
minimum = r;

for (int q = r; q < size; q++)
{
if (tosort[q] < tosort[minimum])
{
minimum = q;
}
}

tmp = tosort[minimum];
tosort[minimum] = tosort[r];
tosort[r] = tmp;

for (int x=0; x<size; x++)
cout << tosort[x] << " ";

cout << endl;
}
double mean = 0, median = 0, mode= 0;
float dev=0;
double sum, sum2;
for (int meancount=0; meancount<size; meancount++)
{
sum=sum + tosort[meancount];
sum2=sum2 + tosort[meancount]*tosort[meancount];
}
double tot;
int med=size/2;
mean = sum/size;
dev = (sum2 - size*mean*mean);
tot= sqrt( dev /size);

cout <<endl <<endl<< "Mean:" << mean<<endl;
cout << "Range: " << abs( tosort[0] - tosort[size-1])<<endl;
cout <<"Sum: " << sum << endl;
if (size % 2 ==0)
{
double ave=0;
ave= tosort[med-1] + tosort[med];
double final=0;
final = ave/2;
cout << "Median: " << final << endl;
}
else
{ cout << "Median: " << tosort[ med ] << endl; }

cout << "Standard Deviation: " <<tot << endl;
system("pause");
system("cls");
}

void insertionSort()

{
int tmp, a;
srand ((unsigned) time(NULL));
int size;
cout << "Array Size: "<<endl;
cin >> size;
cout << endl;
int tosort[size];
for (int i=0;i<size;i++)
{
int x = (rand() %100);
tosort [i] = x;
cout << x << " "  ;

}
cout << endl;

for (int t=1; t<size; t++)
{
tmp = tosort[t];

for (a = t-1; (a >= 0 && tmp < tosort[a]); a--)
{
tosort[a+1] = tosort[a];
}
tosort[a+1] = tmp;

for (int x=0; x<size; x++)
cout << tosort[x] << " ";

cout << endl;
}
double mean = 0, median = 0, mode= 0;
float dev=0;
double sum, sum2;
for (int meancount=0; meancount<size; meancount++)
{
sum=sum + tosort[meancount];
sum2=sum2 + tosort[meancount]*tosort[meancount];
}
double tot;
int med=size/2;
mean = sum/size;
dev = (sum2 - size*mean*mean);
tot= sqrt( dev /size);
cout <<endl<<endl<< "Mean: " << mean<<endl;
cout << "Range: " << abs(tosort[0] - tosort[size-1])<<endl;
cout <<"Sum: " << sum << endl;

if (size % 2 ==0)
{
double ave=0;
ave= tosort[med-1] + tosort[med];
double final=0;
final = ave/2;
cout << "Median: " << final << endl;
}
else
{ cout << "Median: " << tosort[ med ] << endl; }
cout << "Standard Deviation: " <<tot << endl;

system("pause");
system("cls");
}```

2. First step is to fix your indentation.

And you should NEVER call main() yourself.

3. Here begins the list of suggestions for that code, in the order they appear in your program:
• <math.h> is deprecated, use <cmath> instead
• The "if (sort==1) ... else if (sort==2) .. else if (sort==3)" code should be replaced with a switch statement
• Try and use a consistent brace-placement style
• Don't duplicate large amounts of code. Put common code in one function.
• Do not call srand more than once in your program, unless you specifically want to repeat a previous sequence of random numbers
• Don't prototype main, there is NEVER a need for that
• You cannot declare an array using a variable as the size in C++. Either use a vector, or use new[], or use a fixed-size array
• Your BubbleSort is broken - it has a buffer overrun
• Fix your indentation
• Try and be consistent with your use of whitespace
• mode= 0,; why the extra comma?
• You don't need to mix doubles and floats, just pick one and stick with it
• [med-1] produces a buffer underrun when the size entered is zero, as does [size-1]
• NEVER call main!

Popular pages Recent additions