如何在归并排序算法之后重新显示数组,以便显示每一步

本文关键字:显示 数组 每一步 归并排序 算法 之后 新显示 | 更新日期: 2023-09-27 18:03:42

这是我对数组进行排序的归并排序方法,它可以很好地显示排序后的数组,但是我如何显示每个部分解决的步骤呢?

 public void mergeSort(string[] sortArray, int lower, int upper)
        {
            int middle;
            if (upper == lower)
            {
                return;
            }
            else
            {
                middle = (lower + upper) / 2;
                mergeSort(sortArray, lower, middle);
                mergeSort(sortArray, middle + 1, upper);
                Merge(sortArray, lower, middle + 1, upper);
            }
            
        }

我正在考虑添加

foreach (string in sortArray){txtOutput。Text += a + "'t";}

到数组的末尾,但是当我显示排序方法时,所有的部分解一起显示。变成

排序数组:1 8 7 3 1 7 3 8 1 3 7 8 1 3 7 8 8

我想显示为

部分排序数组:

1 8 7 3

1 3 7 8

排序数组:

1 3 7 8

如何在归并排序算法之后重新显示数组,以便显示每一步

在foreach循环之后,向输出字符串追加一个换行符(''n')。

if(lower == 0 && upper == sortArray.Length-1)
   output +="Sorted Array:'n"
foreach(var a in sortedArray)
{
//Display Logic
}

这是一个简单的修复-只需将"'t"更改为"'t'n",就可以了。

为了更美观的显示,这是一个自顶向下归并排序的操作顺序示例,深度优先,左优先。竖线表示当前数组的左右两半之间的分割。显示初始状态,然后显示分裂和合并后的状态。

|4 2 8 6 0 5 1 7 3 9|
|4 2 8 6 0|5 1 7 3 9|
|4 2|8 6 0|
|4|2|
|2 4|
    |8|6 0|
      |6|0|
      |0 6|
    |0 6 8|
|0 2 4 6 8|
          |5 1|7 3 9|
          |5|1|
          |1 5|
              |7|3 9|
                |3|9|
                |3 9|
              |3 7 9|
          |1 3 5 7 9|
|0 1 2 3 4 5 6 7 8 9|

这是一个自底向上的合并排序的操作顺序的例子。竖条表示排序后的运行边界。

|4 2 8 6 0 5 1 7 3 9|
|4|2|8|6|0|5|1|7|3|9|
|2 4|6 8|0 5|1 7|3 9|
|2 4 6 8|0 1 5 7|3 9|
|0 1 2 4 5 6 7 8|3 9|
|0 1 2 3 4 5 6 7 8 9|