我正在玩排序数组,我弄清楚了如何对int数组进行合并排序。但是我不知道合并字符串数组。在正常排序时,对字符串数组进行排序很容易,但合并排序不同。我到目前为止所做的代码如下,正在处理int数组。
public int number = 1;
public void mergeSort(int[] sortArray, int lower, int upper)
{
int middle;
if (upper == lower)
return;
else
{
middle = (lower + upper) / 2;
mergeSort(sortArray, lower, middle);
mergeSort(sortArray, middle + 1, upper);
Merge(sortArray, lower, middle + 1, upper);
}
}
public void Merge(int[] sortArray, int lower, int middle, int upper)
{
string[] temp = new string[sortArray.Length];
int lowEnd = middle - 1;
int low = lower;
int n = upper - lower + 1;
while ((lower <= lowEnd) && (middle <= upper))
{
if (sortArray[lower] <= sortArray[middle])
{
temp[low] = sortArray[lower].ToString();
low++;
lower++;
}
else
{
temp[low] = sortArray[middle].ToString();
low++;
middle++;
}
}
while (lower <= lowEnd)
{
temp[low] = sortArray[lower].ToString();
low++;
lower++;
}
while (middle <= upper)
{
temp[low] = sortArray[middle].ToString();
low++;
middle++;
}
for (int i = 0; i < n; i++)
{
sortArray[upper] = Int32.Parse(temp[upper]);
upper--;
}
}
private void btnExecute_Click(object sender, EventArgs e)
{
String arraylength;
int num;
arraylength = Microsoft.VisualBasic.Interaction.InputBox("Enter a number to determine the length of the array", "Enter Number");
try
{
while (!(int.TryParse(arraylength, out num)))
{
MessageBox.Show("Not a valid number, try again.");
arraylength = Microsoft.VisualBasic.Interaction.InputBox("Enter a number a to determine the length of the array", "Enter Number");
}
}
catch (Exception ex)
{
MessageBox.Show("Value entered is not in a valid format");
}
int intlength = Int32.Parse(arraylength);
string[] stringsArray = new string[intlength];
int arraypos = 0;
// For display purposes
int positionvalue = 1;
txtOutput.Text += "Unsorted array: \r\n";
foreach (string s in stringsArray)
{
string arrayvalue = Microsoft.VisualBasic.Interaction.InputBox("Enter a number for array value" + positionvalue, "Enter Number");
string arrayvalues = arrayvalue;
stringsArray[arraypos] = arrayvalues.ToString();
txtOutput.Text += arrayvalues + "\t";
arraypos++;
positionvalue++;
}
mergeSort(stringsArray, 0, stringsArray.Length - 1);
txtOutput.Text += "\r\nSorted array: \r\n";
foreach (string i in stringsArray)
{
txtOutput.Text += i + "\t";
}
}
我认为在对string
使用排序时,您面临的主要问题是下面一行
if (sortArray[lower] <= sortArray[middle])
因为你不能使用
因为你可以在你的代码中使用它,你可以改变你的代码
while ((lower <= lowEnd) && (middle <= upper)) //notice the CompareTo
{
if (sortArray[lower].CompareTo(sortArray[middle]) < 1) //<= here
{
temp[low] = sortArray[lower];
low++;
lower++;
}
else
{
temp[low] = sortArray[middle];
low++;
middle++;
}
}
你可能需要调整你的最后一个循环和其他一些小事情。
for (int i = 0; i < n; i++)
{
sortArray[upper] = temp[upper]; //sortArray is string[]
upper--;
}
我一直在尝试在我正在开发的程序中实现各种类型的排序。到目前为止,我已经成功地对整数进行了排序。为了使这个(合并)代码排序为字符串数组而不是整数数组,需要做哪些更改?时间复杂度会变化吗?如果是这样,是好是坏? 编辑1:尝试使用比较器。有些事情似乎不对劲。返回错误,例如无法从字符串转换为int,反之亦然。固定的 编辑2:我在if(数组[low].compareTo(数组[high])行得到NullPo
我在名为的类中有一个链表,它包含以下属性: 我有另一个类,它是“实际列表”,它只包含对列表头部的引用,这个类被称为“文本列表”,它接收一个字符串,并假设将该字符串的每个单词排序在列表中。例如,对于句子: 链接列表如下所示: 箭头就像指向列表中下一个节点的指针。 我想先把所有的单词放在一个链表中(类),然后做一个MERGE SORT来对链表中的单词进行排序。 我想做的是采用拆分方法将列表拆分为两个列
对于这个项目,我得到了一个字符串数组和一个整数数组。int[1]是字符串[1]的排名。我需要使用mergesort按1到n的顺序对int数组进行排序,我在下面已经完成了这项工作。但是当int数组被移动时,我还需要切换字符串数组的位置,以便它们都被排序,如果这有意义的话?我不知道我的编码有什么问题,甚至我的想法是否真的有效,但我一直在stringSorted[k]=stringRight[j]上得到
我有一个练习,我必须在链表中插入一个字符串。假设字符串如下所示: 在合并排序之后,链表应该是这样的: 问题是在我的合并排序代码中,我收到以下内容: 所有的单词都被排序,但第一个单词(原始列表的头部)不是。 我有两个类:TextList和WordNode。 WordNode类有两个属性: TextList类只有一个属性:链接列表头的地址: 我有一个构造函数,在其中我将字符串随机插入到一个链表中。最后
问题内容: 我想转换JSON字符串 至 注意:我没有使用排序的版本进行通信(因为键顺序并不重要),我需要一个排序的版本来执行本地测试(通过比较JSON字符串)。 编辑: I4V指出了使用Json.Net的解决方案,我宁愿使用不需要包含任何第三方库的解决方案(实际上,我在应用程序中使用内置的System.Json) 我张贴由I4V +一些测试提供的解决方案要点这里。谢谢你们。 问题答案: 我将为此使
我的任务是用C#为二维数组创建合并排序算法。数组看起来像这样 我需要从文件中取数组并按x的升序对行进行排序,同时程序要检查是否有相同x值同时不同Y值的坐标对,当数组排序后,程序要将其写入文件中。我已经为一维数组创建了算法,但是不懂如何为二维数组重写算法,这是我的代码,请帮助我