Search code examples
c++sortingbubble-sort

Trying to Understand whats wrong with my bubble Sort Method


Im Not Sure why my code wont work.All of them print the same values instead of sorting them. The output doesnt change and the arrays seems unsorted still.Any Ideas how i can fix this?I would like to learn why.

    void BSort::BubbleSort()
{   int temp =0;
     for(int index = 0; index < sizes; index++){
        for(int index2 = 0; index2 < sizes-1; index2++ ){
            if(Array1[index2] > Array1[index2+1]){
                 temp = Array1[index2];
                 Array1[index2] = Array1[index2+1];
                 Array1[index2+1] = temp;           }
        }
     }


}

/*************************************************************************/
//---------------------------  BubbleSort2( )  --------------------------//
/*************************************************************************/


void BSort::BubbleSort2()
{ 
     int temp =0;
     for(int index = 0; index < sizes-1; index++){
        for(int index2 = sizes-1; index2 > index; index2--){
            if( Array2[index2] < Array2[index2-1]){
                 temp = Array2[index2];
                 Array2[index2] = Array2[index2-1];
                 Array2[index2-1] = temp;           
        }
        }
     }
}

/*************************************************************************/
//-----------------------------  CombSort( )  ---------------------------//
/*************************************************************************/


void BSort::CombSort() {
int temp = 0;   
int tempsize =sizes;
int index2;
while((tempsize = int(tempsize/1.3)) >1){
    for(int index = sizes-1; index >= tempsize; index--){
        index2 = index-tempsize;
        if(Array3[index] < Array3[index2]){
            temp = Array3[index];
            Array3[index] = Array3[index2];
            Array3[index2] = temp;
        }   
    }
    bool testcase = true;
    for(int in = 0; in < sizes; in++){
        for(int in2 =sizes-1,testcase = false; in2 > in; in2--){
            if(Array3[in2] < Array3[in2-1])
            { temp = Array3[in2];
                Array3[in2] = Array3[in2-1];
                Array3[in2-1] = temp;
                testcase = true;
            }
        }
    }
}



}

Main File

#include<iostream>



#include<cstdlib>

#include "BSort.h"
using namespace std;


int main(void)
{


       int a[] = {-2, 88, 6, -1, 10, 15, 3, 12, -11, 9, 33, 21, 4, 7, 45, 55, 62, 18, 0, 20};


        BSort S(a,20);


        cout << endl << " Display Array elements before sorting";
        S.DisplayListElements();

        // Calling bubble sort
        S.BubbleSort();
        S.BubbleSort2();
        S.CombSort();

        cout << endl << endl << " Display Array elements Increasing order After BubbleSort";
        S.DisplayListElements();



        system("pause");
        return 0;
}

Solution

  • Try this.. Basically after each iteration you need to run inner loop one less then outer variable... mainly because it is already sorted

     void BSort::BubbleSort()
    {   int temp =0;
         for(int index = 0; index < sizes; index++){
            for(int index2 = 0; index2 < sizes-index; index2++ ){
                if(Array1[index2] > Array1[index2+1]){
                     temp = Array1[index2];
                     Array1[index2] = Array1[index2+1];
                     Array1[index2+1] = temp;           }
            }
         }
    
    
    }