【发布时间】:2015-03-01 15:39:38
【问题描述】:
我是新来的,很抱歉如果我的问题很愚蠢,但我真的需要你的帮助。 我需要按 id (第一列)对二维字符串数组进行排序:
string [,] a = new string [,]
{
{"2","Pena","pena"},
{"1","Kon","kon"},
{"5","Sopol","sopol"},
{"4","Pastet","pastet"},
{"7","Kuche","kuche"}
};
问题是我只对数字进行排序,我想在他们之后对单词进行排序。这就是我到目前为止所做的事情
static void Main(string[] args)
{
string [,] a = new string [,]
{
{"2","Pena","pena"},
{"1","Kon","kon"},
{"5","Sopol","sopol"},
{"4","Pastet","pastet"},
{"7","Kuche","kuche"}
};
int b = a.GetLength(0);
Console.WriteLine(b);
Console.WriteLine(a[0,0]);
Console.WriteLine(a[0,1]);
Console.WriteLine(a[1,0]);
InsertionSort(a, b);
Console.WriteLine();
Console.Write("Sorted Array: ");
printArray(a);
Console.WriteLine();
Console.Write("Press any key to close");
Console.ReadKey();
}
public static void InsertionSort(string[,] iNumbers, int iArraySize)
{
int i, j, index;
for (i = 1; i < iArraySize; i++)
{
for (int k = 0; k < iNumbers.GetLength(1); k++)
{
index = Convert.ToInt32(iNumbers[i, 0]);
j = i;
while ((j > 0) && (Convert.ToInt32(iNumbers[j - 1, 0]) > index))
{
iNumbers[j, k] = iNumbers[j - 1, k];
j = j - 1;
}
iNumbers[j, 0] = Convert.ToString(index);
}
}
}
static void printArray(string[,] iNumbers)
{
for (int i = 0; i < iNumbers.GetLength(0); i++)
{
for (int k = 0; k < iNumbers.GetLength(1); k++)
{
Console.Write(iNumbers[i, k] + " ");
}
}
Console.WriteLine();
}
不幸的是我得到了输出
1 Pena pena 2 Kon kon 4 Sopol sopol 5 Pastet pastet 7 Kuche kuche
如果您能帮助我,我将不胜感激。
【问题讨论】:
-
这看起来像家庭作业。如果您能阐明问题的确切约束,那将很有帮助。您遇到的主要问题是您的
k循环(它本身并不是插入排序的一部分)属于j循环(它是)内部,而不是外部。在您的代码中,当您尝试对行的第一个元素以外的任何内容进行排序时,索引本身已被排序,因此您的循环无法重新排序其他部分。但是,如果您使用锯齿状数组,或者只是索引原始数据,那么整个事情就不会受到该错误的影响。你的老师允许这些方法吗?