如何使用嵌套for循环对数组元素进行排序?

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

我正在接受一项编程挑战练习,但我无法解决这个问题。可能是因为时间和我现在的困倦,但我想在睡觉前完成这个。

我想按升序对数组中每个元素的值进行排序。诀窍是不要使用

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
7个回答
4
投票

您需要交换值

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

2
投票

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

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

这只是将值从索引n

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


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

}

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

        }

    }

此代码有助于按升序对给定枚举进行排序。如果您想让此代码按降序排序,只需将 > 符号更改为 < symbol while comparing the values in inner for loop.

希望这能帮助您解决您的疑问。

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

示例

Array.Sort(a);

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

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

0
投票
    #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;
    }

0
投票

//不使用sort()方法对数组进行排序

让 myArray = [5, 56, 8, 9, 54, 1, 3, 6, 9, 74, 57, 65, 45, 25, 88, 99, 1021, 3254, 97, 4, 369, 25, 456 , 654, 9887, 564, 65787]

let empty;
for (let i = 0; i < myArray.length; i++) {
    for (let j = i; j < myArray.length; j++) {
        if (myArray[i] > myArray[j]) {
            empty = myArray[i];
            myArray[i] = myArray[j];
            myArray[j] = empty;
        }

    }
}
console.log(myArray)

0
投票

这有效

for i in range(len(list)):
    for j in range(len(list)-1):
        if list[i] < list[j]:
            list[j], list[i] = list[i], list[j]
print(list)
© www.soinside.com 2019 - 2024. All rights reserved.