简体   繁体   English

使用 C# 快速排序

[英]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;
    }

code from this post来自这篇文章的代码

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM