如何在每次迭代结束时制作插入排序打印数组?

时间:2019-02-05 05:59:26

标签: c++ insertion-sort

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

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

current result

这是我希望我的代码执行的操作:

desired result

这是我的代码:

for my $i (0..$#foos) {
   my $foo = $foos[$i];
   my $bar = $bars[$i];
   ...
}

3 个答案:

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

答案 1 :(得分:0)

如果您在for中添加另一个简单的main()循环,并在displayarray中添加一行代码以添加新行,则它应生成Desired Result < / p>

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

答案 2 :(得分:0)

我已经在其中添加了代码,以使其能够实时显示。为了遵循您想要的输出,我添加了一个清除控制台功能,该功能可以在将任何文本写出之前清除控制台。这样就可以看到输入新数字后立即看到正在排序的数组的效果。

我还添加了一个显示函数,该函数调用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;
}