【发布时间】:2015-10-11 03:52:01
【问题描述】:
我正在玩排序数组,我想出了如何 MergeSort 一个 int 数组。但我无法弄清楚 MergeSort 一个字符串数组。正常排序时对字符串数组进行排序很容易,但合并排序不同。到目前为止我所做的代码如下,并且正在处理 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";
}
}
【问题讨论】:
-
在 C# 中,您可以比较两个字符串,如 int,并将上面的代码用于您的字符串数组。
-
您可以使用
IComparer<T>.Compare(a, b) <= 0,而不是使用a <= b。您可以对T类型使用默认比较器:Comparer<T>.Default,或者您可以允许调用者指定自己的IComparer<T>实例。
标签: c# arrays string sorting mergesort