2012-12-11 38 views
0

我正在接受编程方面的挑战,我很难搞清楚这一点。这可能是由于时间和我目前的困倦,但我想在睡觉之前完成这件事。如何使用嵌套for循环对数组的元素进行排序?

我想按升序排列数组中每个元素的值。技巧是不使用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。

+0

如果您还不知道,那么这种排序算法就叫做气泡排序。 –

+0

我在发布问题之前看到了它,但是当我尝试它时无法正常工作。现在尝试它,仍然不是真的。我想我一定错过了什么。 – Bex

回答

2

这看起来狡猾的对我说:

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

这只是复制从指数n索引i值。你完全失去了曾经在索引i的价值。我怀疑你想交换的值。

+0

这会更有意义。啊哈。我确实希望调换这些值,使得较低的数字首先出现。 – Bex

+0

@Bex:对。所以现在你需要弄清楚如何做到这一点。提示:你可能需要在if语句体内使用三个语句,使用一个临时变量... –

+0

我明白了,这确实更有意义。谢谢。我会继续修补。 – Bex

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

啊,这是Jon提到的。这使得更有意义。在此之后,我可以使用另一个for-loop显示freq_array? – Bex

+0

你是仪式Bex –

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

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

     } 

    } 

此代码有助于升序给出枚举排序。如果您想让此代码按降序排列,只需将>符号更改为<符号,同时比较inner for循环中的值。

希望这会帮助你解决你的查询。

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

Array.Sort(a); 

* //如果你想在降序排序,使用排序方法进行排序后写下面的代码。 *

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