基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
界面:
主要代码:
//将原问题分解为若干个规模更小但结构与原问题相似的子问题。 //递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 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; }
步骤: