试图了解我的泡沫排序方法有什么问题

Trying to Understand whats wrong with my bubble Sort Method

本文关键字:方法 什么 问题 排序 泡沫 了解 我的      更新时间:2023-10-16

我不知道为什么我的代码不能工作。它们都输出相同的值,而不是对它们进行排序。输出没有改变,数组看起来仍然没有排序。有什么办法可以解决这个问题吗?我想知道为什么。

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

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

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

}
相关文章: