一、介绍
快速排序是使用“分而治之”的方式进行排序,会先再数据中找到一个虚拟的中间值,一般选取第一个值作为中间值,并按此中间值将所有要排序的数值分成两个部分,其中小于中间值的数据放在左边,大于中间值的数据放在右边,再以同样的方式将两边的数据再进行分割找一个中间值,大的放左边,小的放右边, 不断重复此过程,直到数据有序为止。
演示:
用一个恰好是中间的值作为第一个值方便演示

视频演示:
- 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