快速排序中的partition函数详解
来源:互联网 发布:数控车削编程案例 编辑:程序博客网 时间:2024/05/12 07:42
快速排序的精髓就在partition
函数的实现。我们构建两个指针,将数组分为三部分,黑色部分全部小于pivot
,中间蓝色部分都大于pivot
,后面红色部分未知。i
指针遍历整个数组,只要它指向的元素小于pivot
就交换两个指针指向的元素,然后递增。
// arr[]为数组,start、end分别为数组第一个元素和最后一个元素的索引// povitIndex为数组中任意选中的数的索引 int partition(int arr[], int start, int end, int pivotIndex) { int pivot = arr[pivotIndex]; swap(arr[pivotIndex], arr[end]); int storeIndex = start; //这个循环比一般的写法简洁高效 for(int i = start; i < end; ++i) { if(arr[i] < pivot) { swap(arr[i], arr[storeIndex]); ++storeIndex; } } swap(arr[storeIndex], arr[end]); return storeIndex;}
两次swap
是为了将pivot
先暂存在最后一个位置,在完成一次partition
之后将pivot
还原至storeIndex
所指的位置。因为它之前的元素都小于它,之后的都大于它。
如果没有这两次swap
,那么storeIndex
将指向大于等于pivot
的元素,并不能保证它之后的元素都大于pivot
(能保证之前的都是小于的)。storeIndex
位置的元素一旦固定直至程序结束将不会再改变,因此需要使用两次交换暂存pivot
元素。
0 0
- 快速排序中的partition函数详解
- 排序算法中的快速排列中的partition函数
- 快速排序算法中的partition函数的应用
- 快速排序中的partition算法
- 快速排序算法里的partition函数
- 快速排序算法里的partition函数
- 快速排序 partition函数的两种实现小技巧~
- 快速排序算法(Partition函数)分析与拓展
- C语言中的快速排序 qsort函数详解
- 快速排序partition的两种分法
- 快速排序partition算法修正
- 快速排序partition的写法
- 排序 选择问题 Partition函数
- 算法导论中的快速排序详解
- 数据结构和算法学习系列之快速排序的Partition函数一种实现方法
- 快速排序的两种实现方式,主要是Partition函数的实现原理不一样
- 使用VC库函数中的快速排序函数
- 使用VC库函数中的快速排序函数
- 冒泡排序、插入排序、选择排序的原理及比较
- ADO学习(六)服务器和客户端游标
- C++this 指针用法详解
- LeetCode Subsets II
- mui 右滑关闭页面的功能
- 快速排序中的partition函数详解
- GoLang之并发并行与goroutine的思考
- Activity的注册流程、Menu菜单、使用Intent在Activity间切换以及传递数据、Activity的声明周期
- 一个高效的敏感词过滤方法(PHP)
- JSP九大内置对象的作用和用法总结
- ZOJ 3861 Valid Pattern Lock
- 手机题库目录
- python安装pydbg
- 量化交易 心得