首页 > 技术文章 > 快速排序

nygfcn1234 2013-07-22 11:00 原文

基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

界面:

主要代码:

//将原问题分解为若干个规模更小但结构与原问题相似的子问题。
        //递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
        private void btnSort_Click(object sender, EventArgs e)
        {
            try
            {
                string beforeSort = txtBeforeSort.Text.ToString();
                string[] sortArr = beforeSort.Split('*');
                List<int> beforeArr = new List<int>();
                foreach (string str in sortArr)
                {
                    int num = int.Parse(str);
                    beforeArr.Add(num);
                }

                QuickSort(beforeArr, 0, beforeArr.Count - 1);

                string afterStr = "";
                foreach (int i in beforeArr)
                {
                    afterStr += i.ToString() + "*";
                }
                txtAfterSort.Text = afterStr.Substring(0, afterStr.Length - 1);
            }
            catch (Exception ex)
            {
 
            }
        }
        private void QuickSort(List<int> arr,int left,int right)
        {
            if (left < right)
            {
                int p = GetLocation(arr, left, right);
                QuickSort(arr, left, p - 1);
                QuickSort(arr, p + 1, right);
            }
        }
        private int GetLocation(List<int> arr, int left, int aim)
        {
            int beginI = left - 1;
            int beginJ = left;
            while (beginJ < arr.Count)
            {

                if (beginJ == arr.Count - 1)
                {
                    beginI++;
                    int num = arr[beginI];
                    arr[beginI] = arr[aim];
                    arr[aim] = num;
                }
                
                if (arr[beginJ] < arr[aim] )
                {
                    beginI++;
                    int num = arr[beginI];
                    arr[beginI] = arr[beginJ];
                    arr[beginJ] = num;
                }
                beginJ++;
            }
            return beginI;
            
        }

步骤:

 

 

 

推荐阅读