本帖最后由 Mayi 于 2012-12-14 09:09 编辑
快速排序是一种效率很高的排序算法,合并排序是基于位置的,而快速排序是基于值的,
快速排序按照值对数组分区,先选定一个中值,把大于此值的放于一侧,小于的放于另一侧,接下来分别对两侧进行同样的操作,
最后得到一个排序好的数组,
以下是实现代码(采用的是将第一个元素作为中值):
(PS:不是我写的,我写的实现比这个要复杂,有些冗余,)- /// <summary>
- /// 快速排序
- /// </summary>
- /// <param name="arr">排序数组</param>
- /// <param name="low">数组的最低位</param>
- /// <param name="high">数组的最高位</param>
- /// 调用:
- ///int[] A = new int[] { 5, 3, 1, 9, 8, 2, 4, 7 };
- ///QuickSort(ref A, 0, A.Length - 1);
- static void QuickSort(ref int[] arr, int low, int high)
- {
- int midKey;
- if (low < high)
- {
- midKey = Partition(ref arr, low, high);
- QuickSort(ref arr, low, midKey - 1);
- QuickSort(ref arr, midKey + 1, high);
- }
- }
- static int Partition(ref int[] arr, int low, int high)
- {
- int midKey = arr[low], keyValue = arr[low];
- while (low < high)
- {
- while (low < high && arr[high] >= midKey)
- {
- --high;
- }
- arr[low] = arr[high];
- while ( low < high && arr[low] <= midKey)
- {
- ++low;
- }
- arr[high] = arr[low];
- }
- arr[low] = keyValue;
- return low;
- }
复制代码 还有一种实现方式,是以数组最左边,最右边,和最中间的元素作为中值,而当数组较时采用更简单的排序,避免递归,只不过我写的还有些问题,若有实现代码,还请发出来,灰常感谢^_^
其他算法介绍
|