【问题标题】:How to sort elements of an array using nested for-loops?如何使用嵌套的 for 循环对数组的元素进行排序?
【发布时间】:2012-11-28 19:35:37
【问题描述】:

我正在接受一项编程挑战以进行练习,但我无法弄清楚这一点。这可能是由于时间和我目前的困倦,但我想在睡觉前完成。

我想按升序对数组中每个元素的值进行排序。诀窍是不要使用 sort() 方法。这是我目前所拥有的:

          for (int i = 0; i < freq_array.Length; i++)
        {
            for (int n = 1; n < i; n++)
            {
                if (freq_array[n] < freq_array[i])
                    freq_array[i] = freq_array[n];
            }
        }

        for (int x = 0; x < freq_array.Length; x++)
        {
            lblOutDigits.Text = "";
            lblOutDigits.Text += freq_array[x];
        }

在测试时,我只是在标签中得到一个“0”。 freq_array 所做的是保存某些按钮被点击的频率。因此,如果我单击 Button3 5 次,然后单击 Button7 3 次,将它们按顺序排列,我应该会看到 33333777 - 即使我以随机顺序单击 3 和 7。

【问题讨论】:

  • 如果您还不知道,这种排序算法称为冒泡排序。
  • 我在发布问题之前看到了它,但是当我尝试时它不起作用。现在试了,还是不行。我想我一定错过了什么。

标签: c# arrays methods for-loop


【解决方案1】:

你需要交换值

     int temp;
     for (int i = 0; i < freq_array.Length; i++)
            {
                for (int n = 1; n < i; n++)
                {
                    if (freq_array[n] < freq_array[i]){
                        temp = freq_array[i];
                        freq_array[i] = freq_array[n];
                        freq_array[n] = temp;
                    }
                }
            }

【讨论】:

  • 啊,这就是乔恩提到的。这更有意义。在此之后,我可以使用另一个 for 循环显示 freq_array 吗?
【解决方案2】:

这对我来说看起来很狡猾:

if (freq_array[n] < freq_array[i])
    freq_array[i] = freq_array[n];

这只是复制从索引n 到索引i 的值。您完全失去了索引i 的值。我怀疑你想交换这些值。

【讨论】:

  • 这样会更有意义。啊哈。我确实想交换值以使较低的数字首先出现。
  • @Bex:对。所以现在你需要弄清楚如何做到这一点。提示:您可能需要在 if 语句体中使用三个语句,使用临时变量...
  • 我明白了,这确实更有意义。谢谢你。我会继续修补的。
【解决方案3】:
int[] x = { 20, 10, 50, 46, 26, 87, 25, 5, 97, 24 };
for (int i = 0; i < x.Length; i++)
{
    for (int j = i; j < x.Length; j++)
    {
        if (x[i] > x[j])
        {
            int temp;
            temp = x[i];
            x[i] = x[j];
            x[j] = temp;
        }
    }

}

【讨论】:

    【解决方案4】:
        int[] a= { 2, 5, 4, 8, 7, 3 };
        int temp;
        for (int i = 0; i < a.Length; i++) 
        {
            for (int j = 0; j <a.Length; j++) 
            {
                if (j != a.Length - 1)
                {
                    if (a[j] > a[j + 1])
                    {
                        temp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = temp;
                    }
                }
    
            }
    
        }
    

    此代码有助于按升序对给定的枚举进行排序。如果您想让此代码按降序排序,只需在比较内部 for 循环中的值时将 > 符号更改为

    希望这将帮助您解决您的问题。

    另一种排序方式是使用 .Sort 方法。

    例子

    Array.Sort(a);
    

    * //如果要按降序排序,请在使用sort方法排序完成后编写以下代码。 *

    a=a.Reverse().ToArray();
    foreach (var item in a)
    {
      Console.WriteLine(item);
    }
    

    【讨论】:

      【解决方案5】:
          #region Bubble Sort
      
          for (int i = 0; i < n; i++)
          {
              for (int j = 0; j < n - 1; j++)
              {
                  if (a[j] > a[j + 1])
                  {
                      swap(ref a[j], ref a[j + 1]);
                  }
              }
          }
      
          #endregion
      
          #region Insertion Sort
      
          for (int i = 1; i < n; i++)
          {
              int j = i;
              while (j > 0)
              {
                  if (a[j - 1] > a[j])//not in order
                  {
                      swap(ref a[j], ref a[j - 1]);
                  }
                  else//in order
                      break;
                  j--;
              }
          }
      
          #endregion
      
          #region Selection Sort
      
          int smallest;
          for (int i = 0; i < n - 1; i++)
          {
              smallest = i;
              for (int j = i + 1; j < n; j++)
              {
                  if (a[j] < a[smallest])
                  {
                      smallest = j;
                  }
              }
              if (smallest != i)
                  swap(ref a[i], ref a[smallest]);
          }
          #endregion
      

      //交换函数

          public static void swap(ref int a, ref int b)
          {
              int temp = a;
              a = b;
              b = temp;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        • 2020-02-22
        • 2011-04-11
        相关资源
        最近更新 更多