试着理解我的冒泡排序方法有什么问题

时间:2013-04-13 16:59:29

标签: c++ sorting bubble-sort

我不确定为什么我的代码不能正常工作。所有这些代码都打印相同的值而不是对它们进行排序。 输出没有改变,数组似乎仍未排序。任何想法如何解决这个问题?我想了解原因。

    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;
            }
        }
    }
}



}

主文件

#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;
}

1 个答案:

答案 0 :(得分:0)

试试这个..基本上在每次迭代之后你需要运行内部循环少于外部变量...主要是因为它已经排序了

 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;           }
        }
     }


}