气泡排序不完全有效

Bubble sort not working exactly

本文关键字:有效 不完全 排序 气泡      更新时间:2023-10-16

程序可以工作,但问题是排序的数字没有出现。它带来的只是 1,仅此而已。错误在哪里?

#include <iostream>
using namespace std;
int const N = 20;
void pirmaisMasivs(int N);
int main (){
 cout << "Numbers being sorted - 5,4,2,6,1,3,8,9,10,7 > " << pirmaisMasivs;
}

void pirmaisMasivs(int N){
 int temp;
 int masivs[10] = {5,4,2,6,1,3,8,9,10,7};
 for( int i = 0; i < N - 1; i++ ){
    for( int j = 0; j < N - 1; j++ ){
        if( masivs[ j ] > masivs[ j + 1 ]){
        temp = masivs[ j ]; 
        masivs[ j ] = masivs[ j + 1];
        masivs[ j + 1 ] = temp;
 }
 }
 }

}

你的代码有几个问题。

首先,您将要排序的数字总数声明为 int const N = 20; ,但稍后您将10用作固定的文字计数。N = 20显然是错误的。循环将导致数组边界溢出。

另一个问题是,您不会以任何方式输出排序数组。您只需尝试调用排序方法。此外,您声明要在排序方法中排序的整数数组,因此您没有机会访问此方法之外的排序数组来打印它。

这是程序的完全重新设计版本:

#include <iostream>
using namespace std;
int const N = 10;
int masivs[N] = {5,4,2,6,1,3,8,9,10,7};
void pirmaisMasivs() {   
    int temp;
    for( int i = 0; i < N - 1; i++ ) {
        for( int j = 0; j < N - 1; j++ ) {
            if( masivs[ j ] > masivs[ j + 1 ]) {
                temp = masivs[ j ]; 
                masivs[ j ] = masivs[ j + 1];
                masivs[ j + 1 ] = temp;
            }
        }
    }
}
void printMasivs() {
    for( int i = 0; i < N; i++ ) {
        if ( i == 0 ) {
            cout << masivs[ i ];
        }
        else {
            cout << ", ";
            cout << masivs[ i ];            
        }
    }
}
int main () {
    cout << "Numbers being sorted:n";
    printMasivs();
    cout << "n";
    pirmaisMasivs();
    cout << "n";
    printMasivs();
}