C#排序算法的实现---快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
二、算法分析
快速排序每次将待排序数组分为两个部分,在理想状况下,每一次都将待排序数组划分成等长两个部分,则需要logn次划分。而在最坏情况下,即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,快速排序将不幸退化为冒泡排序,所以快速排序时间复杂度下界为O(nlogn),最坏情况为O(n^2)。在实际应用中,快速排序的平均时间复杂度为O(nlogn)。
快速排序是不稳定的排序算法。
三、算法实现
public class QuickSort { //一趟排序 private int SortUnit(int[] list, int i, int j) { int k=list[i]; while (i != j) { while (j > i) { if (list[j] < k) { list[i] = list[j]; break; } j--; } while (i < j) { if (list[i] > k) { list[j] = list[i]; break; } i++; } } list[i] = k; return i; } //递归 private void QuickSortArray(int[] list, int l, int r) { //当左下标和右下标碰头排序结束 if (l >= r) return; int index = SortUnit(list, l, r); QuickSortArray(list, l, index); QuickSortArray(list, index + 1, r); } //快速排序 public void Sort(int[] list) { QuickSortArray(list, 0, list.Length - 1); } }