在排序之前获取具有重复值的数组元素的索引

时间:2016-11-03 11:20:57

标签: c# arrays sorting indexing

我有重复值的整数数组。我需要按降序排序并打印2行。

Algorythm:

  • index = 0;
  • 查找数组中的最大值
  • 通过Console.Write($"{maxPos} ");
  • 打印出原始索引
  • 使用带有index
  • 的第一个值的元素切换它
  • 对数组中的所有其他元素重复
  • 使用Console.Write($"{a[i]} ");)
  • 打印出已排序的数组

麻烦的是我无法在控制台中打印索引,无论是什么。

using System;

public class SortProblem
{
    public static void Main()
    {
        Sort();
    }

    public static void Sort()
    {
        var array = new [] 
        {
            10, 10, 5, 2, 2, 5, 6, 7, 8, 15, 4, 4, 4, 2, 3, 5, 5, 36, 32, 623, 7, 475, 7, 2, 2, 44, 5, 6, 7, 71, 2 
        };

        for (int index = 0; index < array.Length -1; index++)
        {
            int max = index;

            for (int elemIndex = index+1; elemIndex < array.Length; elemIndex++)
            {
                if (array[elemIndex] > array[max])
                {
                    max = elemIndex;
                }
            }

            int tmp = array[index];
            array[index] = array[max];
            array[max] = tmp;
        }

        foreach (int element in array) 
        {
            Console.Write (element+" ");
        }
    }
}

预期输出为:

  

19 21 29 25 17 18 9 19 21 21 19 20 22 28 21 27 16 18 26 27 29 22 27 29 27 25 26 27 28 29 30   623 475 71 44 36 32 15 10 10 8 7 7 7 7 6 6 5 5 5 5 5 4 4 4 3 2 2 2 2 2 2

2 个答案:

答案 0 :(得分:1)

最简单的解决方案:

Favorite

但是要回顾一下你的算法:

CREATE TABLE Example
(
ID int,
MyChar char(1)
);

INSERT INTO Example (ID, MyChar)
VALUES ('1','[');

答案 1 :(得分:1)

using System;

public class SortProblem
{
    public static void Main()
    {
        Sort();
        Console.ReadKey();
    }
    public static void Sort()
    {
        var a = new[]
        {
            10, 10, 5, 2, 2, 5, 6, 7, 8, 15, 4, 4, 4, 2, 3, 5, 5, 36, 32, 623, 7, 475, 7, 2, 2, 44, 5, 6, 7, 71, 2
        };
        Max_elements(a);
        Console.WriteLine();
        Sort_elements(a);
    }
    private static void Max_elements(int[] a)
    {
        /*"індекс" = 0 */
        for (int index = 0; index < a.Length; index++)
        {
            /*Знаходить у списку найбільше значення таке,
             *що його позиція дорівнює або більша за "index"
             *(справа від елемента на позиції "індекс")*/
            int maxPos = index, tmp;
            /* відсортує заданий масив "a"
             * у порядку спадання "elemIndex < a"
             * за допомогою алгоритму сортування вибором ".Length"*/
            for (int elemIndex = index + 1; elemIndex < a.Length; elemIndex++)
            {
                /*Якщо елемент на позиції elemIndex
                 *більше елемента на позиції maxPos,
                 *то необхідно онвити значення "індекс"*/
                if (a[elemIndex] > a[maxPos])
                {
                    maxPos = elemIndex;
                }
            }
            /*Міняє його місцями з елементом масиву на позиції "індекс"*/
            tmp = a[index];
            a[index] = a[maxPos];
            a[maxPos] = tmp;
            /*виводимо всі позиції максимального елемента і пробіл після неї*/
            Console.Write($"{maxPos} ");
            /*Рядок, який передує символ $ називається Інтерпольований рядок.
             Інтерпольовані рядки можуть містити вирази взяті у фігурні дужки {}*/
        }
    }

    private static void Sort_elements(int[] a)
    {
        for (int i = 0; i < a.Length; i++)
        {
            /*виводимо всі елементи відсортованого масиву і пробіл після неї*/
            Console.Write($"{a[i]} ");
        }
    }   
}