对大数组进行排序,保留一些元素(每种语言)

Sort an large array, keeping some elements in place (every language)

大家可以帮帮我吗?我有一个问题:给定一个数组元素数组(无限数量的数组元素)。按升序对元素进行排序,但保留任何值为-1 的元素在原始位置。

示例:a=[4, -1, 5, 1, 8, 3, 2, -1]

排序后:a=[1, -1, 2, 3, 4, 5, 8, -1]

您可以使用非-1 的每个项目的索引创建一个新列表,即需要排序的项目的索引,然后按照此 RosettaCode 任务中的示例之一进行操作:Sort disjoint sublist

以下是您在 C# 中完成此操作的方法:

using System;
using System.Collections.Generic;

namespace NameSpace
{
    class Class
    {
        static int[] a = { 4, -1, 5, 1, 8, 3, 2, -1 };
        static List<int> Storage = new List<int>();
        static int indexToAdd = 0;
        static void Main()
        {
            foreach(int i in a)
            {
                if(i != -1)
                {
                    Storage.Add(i);
                }
            }
            Storage.Sort();

            for(int i = 0; i < Storage.Count; i++)
            {
                if(a[indexToAdd + i] == -1)
                {
                    indexToAdd++;
                }
                a[indexToAdd + i] = Storage[i];
            }

            foreach(int i in a)
            {
                Console.WriteLine(i);
            }
            Console.Read();
        }
    }
}