【发布时间】:2021-10-30 05:15:46
【问题描述】:
您好,我尝试进行快速排序但没有出现结果,例如用户输入“cdabe”,因此预期结果为“abcde”。我可以知道结果没有显示的原因是什么吗? 因为代码中没有错误。我正在使用 MVC。我的 MergeSort 工作正常,但我的 QuickSort 没有。
型号:
public string QuickSort()
{
string arrangedSort = "";
string Word= "cdabe";
List<string> ListLetters = new List<string>();
for (int i = 0; i < Word.Length; i++)
{
ListLetters.Add(Word.Substring(i, 1));
}
aQuicksort(Word, 0, ListLetters.Count - 1);
void aQuicksort(string Word, int left, int right)
{
int i = left;
int j = right;
var pivot = Word[(left + right) / 2];
while (i <= j)
{
while (char.Parse(ListLetters[i]) < pivot)
i++;
while (char.Parse(ListLetters[i]) > pivot)
j--;
if (i <= j)
{
var tmp = ListLetters[i];
ListLetters[i] = ListLetters[j];
ListLetters[j] = tmp;
i++;
j--;
}
}
if (left < j)
aQuicksort(Word, left, j);
if (i < right)
aQuicksort(Word, i, right);
foreach (var listLetter in ListLetters)
{
arrangedSort += listLetter;
}
}
return arrangedSort;
}
【问题讨论】:
-
结果没有显示的原因是什么? - 因为你没有包含任何
Console.writeLine或类似的 -
您的代码很难排除故障。
Word既是参数 也是 嵌入函数中的变量。aquicksort是本地函数,没有特殊原因。这在语法上都是合法的,但容易出错。我假设您是 C# 新手 - 所以我建议您清理/简化您的代码,然后进行一些调试 -
很抱歉,经过您的编辑,这个问题不再有意义。这是模型?控制器?早点比较好
-
在 C# 中,字符串可以被视为字符数组。您可以要求
"hello world"[4]并获得'o'您还可以使用.ToCharArray将字符串转换为字符数组 - 这样您将字符串子串到字符串列表中的整个位,然后将它们解析为字符- 把它扔掉,做一个 ToCharArray,用 char 数组做所有的工作,把数组一直保持为 chars 直到它被排序,然后用new string(theArray)把它变成一个字符串。目前,您正在做的所有字符串操作都使这是一个相当缓慢的快速排序.. -
要在 C# 中进行快速排序,请使用
Array.Sort或List.Sort
标签: c# model-view-controller quicksort