(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
sortUnit(array: number[], low: number, high: number) {
let key = array[low]
while (low < high) {
while (key <= array[high] && high > low) {
high--
}
array[low] = array[high]
while (key >= array[low] && high > low) {
low++
}
array[high] = array[low]
}
array[low] = key
return low
}
sort(array: number[], low: number, hight: number) {
if (low >= hight)
return
let index = this.sortUnit(array, low, hight)
this.sort(array, low, index - 1)
this.sort(array, index + 1, hight)
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test
{
class QuickSort
{
static void Main(string[] args)
{
int[] array = {2,20,1,20,44,55,21,1,4,8,0 };
sort(array, 0, array.Length - 1);
Console.ReadLine();
}
private static int sortUnit(int[] array, int low, int high)
{
int key = array[low];
while (low < high)
{
while (array[high] >= key && high > low)
--high;
array[low] = array[high];
while (array[low] <= key && high > low)
++low;
array[high] = array[low];
}
array[low] = key;
return high;
}
public static void sort(int[] array, int low, int high)
{
if (low >= high)
return;
int index = sortUnit(array, low, high);
sort(array, low, index - 1);
sort(array, index + 1, high);
}
}
}