分治思想之快速排序
来源:互联网 发布:牛群 冯巩 知乎 编辑:程序博客网 时间:2024/06/04 18:13
void QuikSort(int arr[], int length){
QuikSort(arr,0,length-1);
}
//low:数组的左边界值,开始为0
//high:数组的右边界值,开始为length-1
void QuikSort(int arr[], int low, int high){
if(low>=high){ //递归退出条件:只有一个元素时
return;
}
int pivot = arr[low];
int i=low;
//这里的实现有点不一样,先找出pivot小的放到一边,而不是直接交换pivot和目标
for(int j=low+1;j<=high;j++){
if(arr[j]<=pivot){ //a[j] is smaller than pivot
i++; //只要找到小于pivot的目标就向前挖多一个坑
if(i!=j){
Swap(arr[i],arr[j]);//但只有目标不占坑位时才需要交换
}
}
}
//最后才将pivot放到中间隔离两边的数
//有可能所有的数都比pivot大,这样也不需要交换
Swap(arr[low],arr[i]); //Swap pivot to middle position
//进行分化(partition),递归
QuikSort(arr,low,i-1); //a[i] is the pivot now
QuikSort(arr,i+1,high);
}
void Swap(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
QuikSort(arr,0,length-1);
}
//low:数组的左边界值,开始为0
//high:数组的右边界值,开始为length-1
void QuikSort(int arr[], int low, int high){
if(low>=high){ //递归退出条件:只有一个元素时
return;
}
int pivot = arr[low];
int i=low;
//这里的实现有点不一样,先找出pivot小的放到一边,而不是直接交换pivot和目标
for(int j=low+1;j<=high;j++){
if(arr[j]<=pivot){ //a[j] is smaller than pivot
i++; //只要找到小于pivot的目标就向前挖多一个坑
if(i!=j){
Swap(arr[i],arr[j]);//但只有目标不占坑位时才需要交换
}
}
}
//最后才将pivot放到中间隔离两边的数
//有可能所有的数都比pivot大,这样也不需要交换
Swap(arr[low],arr[i]); //Swap pivot to middle position
//进行分化(partition),递归
QuikSort(arr,low,i-1); //a[i] is the pivot now
QuikSort(arr,i+1,high);
}
void Swap(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
0 0
- 分治思想之快速排序
- 分治思想之快速排序
- 分治思想之快速排序
- 算法之分治思想和快速排序
- 快速排序算法-分治思想
- 快速排序之“挖坑填数+分治”思想实现
- 算法分析——分治思想之快速排序
- 【快速排序、合并排序与分治思想】
- 分治思想之归并排序
- 分治思想之归并排序
- 分治思想之排序算法
- 快速排序基于分治法的思想
- 快速排序 : 分治和递归思想
- 分治算法之快速排序
- 分治法之快速排序
- 分治法之快速排序
- 分治法之快速排序
- 分治算法之快速排序
- android jni开发
- Android笔记之用eclipse给zxing打jar包
- Android Bitmap换背景颜色
- Afinal 框架学习
- Rebar:Erlang构建工具(转载)
- 分治思想之快速排序
- 正确使用Java的foreach语句
- Swift的Guard语句
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
- Android、iOS支持的音频格式
- 图像中的mAP评价指标
- 网站如何反爬虫浅析
- JQuery EasyUI表单-表单验证
- Spring通过构造方法注入的四种方式