如何使插入排序打印阵列在每次迭代的结束?

问题描述 投票:0回答:3

我插入排序代码工作正常,然后在用户输入数组的大小则数组元素显示最终排序列表,我想让它在每次迭代的结尾展示SORTD列表。

我当前的代码做到这一点:

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;
}
c++ insertion-sort
3个回答
0
投票

如果您在for再添简单main()循环,并添加一行代码在displayarray添加一个新行,它应该产生Desired Result

#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
投票

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

0
投票

我已经添加代码到让它显示,因为它去一起。试图追随你所需的输出我已经添加任何文字写出来之前,它会清除控制台清除控制台功能。这允许看到阵列的效果被尽快新的数字输入的命令。

我还添加了调用clearConsole()()显示功能,displayArray和另一个新的功能,我也添加了显示尺寸()。此功能可以让用户更容易的可读性每次前述任何信息,表述数组的大小将与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;
}
© www.soinside.com 2019 - 2024. All rights reserved.