[英]Quick Sort using C#
Hello I trying to do a QuickSort but didn't appear the result, For example the user input "cdabe" so the expected result is "abcde".您好,我尝试进行 QuickSort,但没有出现结果,例如用户输入“cdabe”,因此预期结果是“abcde”。 May I know what is the cause why the result didn't display?
我可以知道结果没有显示的原因是什么? because There is no error in the code.
因为代码中没有错误。 I'm using MVC.
我正在使用MVC。 My MergeSort is working properly but my QuickSort didn't.
我的 MergeSort 工作正常,但我的 QuickSort 没有。
Model :模型 :
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;
}
View看法
public void QuickSort()
{
Sort word = new Sort();
word.Word = sortView.WordText;
sortView.result = word.QuickSort();
}
Contoller控制器
public interface ISort
{
string WordText { get; set; }
string result { get; set; }
}
Form形式
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;
}
}
}
This is the example output这是示例输出
Try this implementation, it uses LinQ using System.linq
试试这个实现,它
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.