一、介绍
快速排序是使用"分而治之"的方式进行排序,会先再数据中找到一个虚拟的中间值,一般选取第一个值作为中间值,并按此中间值将所有要排序的数值分成两个部分,其中小于中间值的数据放在左边,大于中间值的数据放在右边,再以同样的方式将两边的数据再进行分割找一个中间值,大的放左边,小的放右边, 不断重复此过程,直到数据有序为止。
演示:
用一个恰好是中间的值作为第一个值方便演示
视频演示:
cs
void QuickSort(int[] data, int left, int right)
{
//首先需要判断left与right的值
if (left < right)
{
//进行分区,并返回一个基准值的索引值
int pivotIdx = GetPivotIndex(data,left,right);
QuickSort(data,left, pivotIdx - 1);
QuickSort(data, pivotIdx + 1, right);
}
}
private int GetPivotIndex(int[] data, int left, int right)
{
int pivot = data[left];
while (left < right)
{
if (left < right && data[right] >= pivot)
{
--right;
}
data[left] = data[right];
if (left < right && data[left] <= pivot)
{
++left;
}
data[right] = data[left];
}
//两边都交换完成,将pivot的值赋值给left对应的位置
data[left] = pivot;
return left;
}
参考链接:
1.6 快速排序 | 菜鸟教程 (runoob.com)https://www.runoob.com/w3cnote/quick-sort-2.html
快速排序 | 菜鸟教程 (runoob.com)https://www.runoob.com/w3cnote/quick-sort.html