Как сделать вставку сортировать массив печати в конце каждой итерации? - PullRequest
0 голосов
/ 05 февраля 2019

Мой код сортировки вставкой работает правильно, и пользователь вводит размер массива, затем элементы массива затем показывает окончательный отсортированный список, я хочу, чтобы он отображал список сортировки в конце каждой итерации.

Мой текущий код делаетэто:

current result

Это то, что я хочу, чтобы мой код делал:

desired result

Вот мой код:

#include <iostream>
using namespace std;

void insertionsort(int A[], int n)
{
int value,hole,i;
 for(int i=1; i<n; i++)
 {
     value = A[i];
     hole = i;

     while(hole > 0 && A[hole-1] > value)
     {
         A[hole] = A[hole-1];
         hole = hole -1;
     }
     A[hole] = value;
 }
}

void displayarray(int A[], int n)
{
    for(int i=0; i<n; i++)
    cout << A[i] << ";";
}

int main()
{
    int n;
    cin >> n;
    int A[n];

    for(int i=0; i<n; i++)
    cin >> A[i];

    insertionsort(A,n);
    displayarray(A,n);

    return 0;
}

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Если вы добавите еще один простой цикл for в свой main() и добавите одну строку кода в displayarray, чтобы добавить новую строку, он должен сгенерировать Желаемый результат

#include <iostream>
using namespace std;

void insertionsort(int A[], int n)
{
    int value,hole  ;
    for(int i=1; i<n; i++)
    {
        value = A[i];
        hole = i;

        while(hole > 0 && A[hole-1] > value)
        {
            A[hole] = A[hole-1];
            hole = hole -1;
        }
        A[hole] = value;
    }
}

void displayarray(int A[], int n)
{
    for(int i=0; i<n; i++)
        cout << A[i] << ";";
    cout << "\n";
}

int main()
{
    int n;
    cin >> n;
    int A[n];

    for(int i=0; i<n; i++){
        cin >> A[i];
    }
    for(int i=0; i<n; i++){
        if(i > 0){
            insertionsort(A,i+1);
            displayarray(A, i+1);
        }
    }

    return 0;
}
0 голосов
/ 05 февраля 2019

Я добавил код, чтобы он отображался по мере продвижения.Пытаясь следовать желаемому выводу, я добавил функцию очистки консоли, которая очищает консоль перед тем, как в нее будет записан какой-либо текст.Это позволяет увидеть порядок упорядочения массива, как только будут введены новые числа.

Я также добавил функцию отображения, которая вызывает clearConsole (), displayArray () и другую добавленную мной функцию, называемую displaySize ().Эта функция обеспечивает удобочитаемость, определяя размер массива каждый раз, когда любая предыдущая информация будет удалена с помощью clearConsole ().

#include <iostream>


void insertionsort(int A[], int n)
{
    int value, hole, i;
    for (int i = 1; i < n; i++)
    {
        value = A[i];
        hole = i;

        while (hole > 0 && A[hole - 1] > value)
        {
            A[hole] = A[hole - 1];
            hole = hole - 1;
        }
        A[hole] = value;
    }
}

void displayarray(int A[], int n)
{
    for (int i = 0; i < n; i++)
        std::cout << A[i] << ";";
}

void clearConsole()
{
    std::cout << std::flush;
    system("CLS");
}

void displaySize(int size)
{
    std::cout << "An array of size: " << size << "\n" << std::endl;
}

void display(int A[], int n, int size)
{
    clearConsole();
    displaySize(size);
    displayarray(A, n);
}

int main()
{
    int n;
    std::cin >> n;
    clearConsole();
    displaySize(n);

    int *A = new int[n];

    for (int i = 0; i < n; i++)
    {
        std::cin >> A[i];
        insertionsort(A, i+1);
        display(A, i+1, n);
    }


    insertionsort(A, n);
    displayarray(A, n);

    return 0;
}
0 голосов
/ 05 февраля 2019

См. Код, добавленный после A[hole] = value;

#include <iostream>
using namespace std;

void displayarray(int A[], int n)
{
    for(int i=0; i<n; i++)
    cout << A[i] << ";";
}

void insertionsort(int A[], int n)
{
int value,hole,i;
 for(int i=1; i<n; i++)
 {
     value = A[i];
     hole = i;

     while(hole > 0 && A[hole-1] > value)
     {
         A[hole] = A[hole-1];
         hole = hole -1;
     }
     A[hole] = value;


     // Call displayarray at end of each pass
     // Passing `i+1` as second parameter gives you desired result
     displayarray(A,i+1); 
     cout << endl;
 }
}

int main()
{
    int n;
    cin >> n;
    int A[n];

    for(int i=0; i<n; i++)
    cin >> A[i];

    insertionsort(A,n);
    //displayarray(A,n); //Commented this line

    return 0;
}
...