C# MergeSort数组-C语言中的部分排序解决方案#
这是我的任务: “程序还应显示数组的部分排序解决方案。这些部分步骤应清楚显示算法如何对数组元素进行排序。” 我可以显示未排序和已排序的数组,但我需要知道如何显示(显示)所需的部分步骤 我的代码是:C# MergeSort数组-C语言中的部分排序解决方案#,c#,C#,这是我的任务: “程序还应显示数组的部分排序解决方案。这些部分步骤应清楚显示算法如何对数组元素进行排序。” 我可以显示未排序和已排序的数组,但我需要知道如何显示(显示)所需的部分步骤 我的代码是: namespace MergeSort { public partial class Main : Form { public Main() { InitializeComponent(); }
namespace MergeSort
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void btnExecute_Click(object sender, EventArgs e)
{
String arrayLength;
int num;
// InputBox functionality used for user to enter the size of an array to be sorted.
arrayLength = Interaction.InputBox("Enter a number that represent the length of array", "Enter Legth Of Array");
try
{
while (!(int.TryParse(arrayLength, out num)))
{
MessageBox.Show("Not a valid number!\r\nPlease try again!");
arrayLength = Interaction.InputBox("Enter a number that represent the length of array", "Enter Legth Of Array");
}
}
catch (Exception ex)
{
MessageBox.Show("Value entered is not a valid format!", ex.Message);
}
int intLength = int.Parse(arrayLength);
string[] stringArray = new string[intLength];
int arrayPosition = 0;
int positionValue = 1;
//To display unsorted array
txtOutput.Text += "Unsorted array: \r\n";
foreach (string s in stringArray)
{
// InputBox functioanlity to prompt user to enter the text (string) into the arrary to be sorted.
string value = Interaction.InputBox("Enter the string in the array to be sorted" + positionValue, "Enter the string ");
stringArray[arrayPosition] = value.ToString();
txtOutput.Text += value + "\t";
arrayPosition++;
positionValue++;
}
//To display sorted array
txtOutput.Text += "\r\nSorted array: \r\n";
mergeSort(stringArray, 0, stringArray.Length - 1);
foreach (string s in stringArray)
{
txtOutput.Text += s + "\t";
}
txtOutput.Text = txtOutput.Text + "\r\n";
//To display each step
foreach (string s in stringArray)
{
txtOutput.Text += ("\r\nValue at position " + " " + Array.IndexOf(stringArray, s)+ " " + "is" + " " + s + "\r\n");
}
}
public void mergeSort (string[] 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(string[] 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].CompareTo(sortArray[middle]) < 1)
{
temp[low] = sortArray[lower];
low++;
lower++;
}
else
{
temp[low] = sortArray[middle];
low++;
middle++;
}
}
while (lower <= lowEnd)
{
temp[low] = sortArray[lower];
low++;
lower++;
}
while (middle <= upper)
{
temp[low] = sortArray[middle];
low++;
middle++;
}
for (int i = 0; i < n; i++)
{
sortArray[upper] = temp[upper];
upper--;
}
}
}
}
名称空间合并排序
{
公共部分类Main:表单
{
公用干管()
{
初始化组件();
}
私有void btnExit\u单击(对象发送者,事件参数e)
{
Application.Exit();
}
私有void btnExecute\u单击(对象发送者,事件参数e)
{
字符串排列长度;
int-num;
//InputBox功能,用于用户输入要排序的数组的大小。
arrayLength=Interaction.InputBox(“输入表示数组长度的数字”,“输入数组长度”);
尝试
{
而(!(int.TryParse(arrayLength,out num)))
{
MessageBox.Show(“不是有效的数字!\r\n请重试!”);
arrayLength=Interaction.InputBox(“输入表示数组长度的数字”,“输入数组长度”);
}
}
捕获(例外情况除外)
{
MessageBox.Show(“输入的值不是有效格式!”,例如Message);
}
int intLength=int.Parse(arrayLength);
string[]stringArray=新字符串[intLength];
int-arrayPosition=0;
int positionValue=1;
//显示未排序的数组的步骤
txtOutput.Text+=“未排序的数组:\r\n”;
foreach(stringArray中的字符串s)
{
//InputBox功能,提示用户在要排序的数组中输入文本(字符串)。
string value=Interaction.InputBox(“在要排序的数组中输入字符串”+positionValue,“输入字符串”);
stringArray[arrayPosition]=value.ToString();
txtOutput.Text+=值+“\t”;
数组位置++;
位置值++;
}
//显示已排序数组的步骤
txtOutput.Text+=“\r\n已选数组:\r\n”;
mergeSort(stringArray,0,stringArray.Length-1);
foreach(stringArray中的字符串s)
{
txtOutput.Text+=s+“\t”;
}
txtOutput.Text=txtOutput.Text+“\r\n”;
//显示每个步骤
foreach(stringArray中的字符串s)
{
txtOutput.Text+=(“+”“+Array.IndexOf(stringArray,s)+”“+”位置的“\r\n值是“+”“+s+”\r\n”);
}
}
公共void合并排序(字符串[]sortArray,整数下限,整数上限)
{
中间;
如果(上==下)
返回;
其他的
{
中间=(下部+上部)/2;
合并排序(sortArray、下、中);
合并排序(sortArray,中间+1,上部);
合并(sortArray,下,中+1,上);
}
}
public void Merge(字符串[]sortArray,int-lower,int-middle,int-upper)
{
string[]temp=新字符串[sortArray.Length];
int lowEnd=中间-1;
int低=较低;
int n=上-下+1;
而((对于移动数组元素的排序算法中的每个步骤,请在移动后重新显示数组。这是我的代码,只是想确保我正确理解问题,而不是在代码之后,只是在一条建议之后。谢谢Kevin,这就是我需要澄清的全部内容。