pass sorting

I need my program to look like this. I kinda started right but I'm stuck. I'm not sure what to do next. please help

Thanks in advance




Data items in original order
   2   6   4   8  10  12  89  68  45  37

After pass 0:   2  4  6  8 10 12 68 45 37 89
After pass 1:   2  4  6  8 10 12 45 37 68
After pass 2:   2  4  6  8 10 12 37 45
After pass 3:   2  4  6  8 10 12 37
After pass 4:   2  4  6  8 10 12
After pass 5:   2  4  6  8 10
After pass 6:   2  4  6  8
After pass 7:   2  4  6
After pass 8:   2  4

Data items in ascending order
   2   4   6   8  10  12  37  45  68  89
Number of comparisons = 45 





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

#include <iostream>
using namespace std;

#include <iomanip>

int main() {

    const int arraysize = 10;
    int a [arraysize] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
    int hold;
    
    cout << "Data in Original Order" << endl;
    for (int i=0; i <arraysize; i++)
        cout << setw(4) << a[i];
        cout << endl << endl;
    for (int pass=0;pass < arraysize-1;pass++)
        for (int j=0; j<arraysize-1;j++)
            if ( a[ j ] > a[ j + 1 ] ) {
            hold = a[ j ];
            a[ j ] = a[ j + 1 ];
            a[ j + 1 ] = hold;
        cout <<"After Pass 0:";
        for ( int k = 0; k < arraysize; k++ )
        cout << setw( 4 ) << a[ k ];
        cout << endl;
                


    return 0;
            }
}
Hi,

With braces and indenting - you need to fix these up.

It's good practice to always use braces in control flow (loops, if etc.) even if there is only 1 statement.

In your code, the intention is shown with the indenting, but there are no braces.

You should be able to get your IDE to do this for you, automatically.

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
#include <iostream>
//using namespace std; avoid this

#include <iomanip>

int main() {

    const int arraysize = 10;
    int a [arraysize] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
    int hold;
    
    std::cout << "Data in Original Order\n";

    for (int i=0; i <arraysize; i++) {
        std::cout << std::setw(4) << a[i];
        std::cout << "\n\n";  // use '\n' rather than std::endl
    }  // line up closing brace

    for (int pass=0;pass < arraysize-1;pass++) { // always use a brace
        for (int j=0; j<arraysize-1;j++) {
            if ( a[ j ] > a[ j + 1 ] ) {
              hold = a[ j ];
              a[ j ] = a[ j + 1 ];
              a[ j + 1 ] = hold;
            } // line up closing brace
        }
    }  // line up closing brace

        std::cout <<"After Pass 0:";

        for ( int k = 0; k < arraysize; k++ ) {
           std::cout << std::setw( 4 ) << a[ k ] << "\n";
           //std::cout << endl;
        }
                
    return 0;
           // }  
}


Also, provide meaningful names : a is not good for a container.

Hope all goes well :+)

Edit:

So when this is run, the placement of the '\n' is different to what you intended, so have a go a fixing that :+)
Last edited on
Topic archived. No new replies allowed.