[英]Quick Sort using C#
您好,我尝试进行 QuickSort,但没有出现结果,例如用户输入“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;
}
看法
public void QuickSort()
{
Sort word = new Sort();
word.Word = sortView.WordText;
sortView.result = word.QuickSort();
}
控制器
public interface ISort
{
string WordText { get; set; }
string result { get; set; }
}
形式
public partial class Form1 : Form, ISort
{
public Form1()
{
InitializeComponent();
}
public string WordText {
get
{
return enterString.Text;
}
set
{
enterString.Text = value;
}
}
public string result
{
get
{
return sortResult.Text;
}
set
{
sortResult.Text = value;
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnSort_Click(object sender, EventArgs e)
{
SortView view = new SortView(this);
string selectSort = comSort.Text;
switch (selectSort)
{
case "MergeSort": view.MergeSort();break;
case "QuickSort": view.QuickSort(); break;
}
}
}
这是示例输出
试试这个实现,它using System.linq
使用 LinQ
public static IEnumerable<int> QSort3(IEnumerable<int> source)
{
if (!source.Any())
return source;
int first = source.First();
QSort3Helper myHelper =
source.GroupBy(i => i.CompareTo(first))
.Aggregate(new QSort3Helper(), (a, g) =>
{
if (g.Key == 0)
a.Same = g;
else if (g.Key == -1)
a.Less = g;
else if (g.Key == 1)
a.More = g;
return a;
});
IEnumerable<int> myResult = Enumerable.Empty<int>();
if (myHelper.Less != null)
myResult = myResult.Concat(QSort3(myHelper.Less));
if (myHelper.Same != null)
myResult = myResult.Concat(myHelper.Same);
if (myHelper.More != null)
myResult = myResult.Concat(QSort3(myHelper.More));
return myResult;
}
public class QSort3Helper
{
public IEnumerable<int> Less;
public IEnumerable<int> Same;
public IEnumerable<int> More;
}
来自这篇文章的代码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.