Простая программа сортировки массивов, показывающая некорректный вывод - PullRequest
0 голосов
/ 20 февраля 2020

Когда я запускаю данную программу, я получаю вывод:

-2 -2 -2 -2 

Код указан ниже:

#include<iostream>
using namespace std;

int main(){
int a;
int arr[4]={7,-1,0,-2};
for(int i=0;i<4;i++){
    a=i;
    for(int j=i+1;j<4;j++){
        if(arr[j]<arr[a])
            a=j;
    }
 arr[i] = arr[a];
}
for(int z=0;z<4;z++)
    cout<<arr[z]<<"\t";
return 0;
}

Где я делаю ошибку?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

привет, спасибо за помощь, исправленный код:

#include<iostream>
using namespace std;

int main(){
int a;
int arr[6] = {12,-3,45,-2,-2,65};
for(int i=0;i<6;i++){
    a=i;
    for(int j=i+1;j<6;j++){
        if(arr[j]<arr[a])
            a=j;

    }
    swap(arr[a],arr[i]);
}

for(int z=0;z<6;z++)
    cout<<arr[z]<<"\t";
return 0;
}

или с помощью временной переменной для обмена:

#include<iostream>
using namespace std;

int main(){
int a,temp;
int arr[4] = {-6,-3,0,7};
for(int i=0;i<4;i++){
    a=i;
    for(int j=i+1;j<4;j++){
        if(arr[j]<arr[a])
            a=j;

    }
    temp = arr[i];
    arr[i] = arr[a];
    arr[a] = temp;
}

for(int z=0;z<4;z++)
    cout<<arr[z]<<"\t";
return 0;
}
0 голосов
/ 20 февраля 2020

В настоящее время вы перезаписываете элементы. Вы можете поменять местами элементы с помощью std :: swap:

#include <iostream>
using std::cout;

int main(){
    int a;
    int arr[4] = {7, -1 , 0, -2};
    for(int i = 0; i < 4; ++i){
        a = i;
        for(int j = i + 1; j < 4; ++j){
            if(arr[j] < arr[a])
               a = j;
        }
        std::swap(arr[i], arr[a]);
    }
    for(const auto &el: arr)
        cout << el << '\t';
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...