对大数组进行排序,保留一些元素(每种语言)
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();
}
}
}
大家可以帮帮我吗?我有一个问题:给定一个数组元素数组(无限数量的数组元素)。按升序对元素进行排序,但保留任何值为-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();
}
}
}