您的位置:首页 > 编程语言 > C语言/C++

C++之快速排序(3)---《那些奇怪的算法》

2017-09-21 22:00 337 查看
针对快排,我们设计思路是选择一个pivot门哨,将比pivot小的值放在其左边,比pivot大的值放在其右边,重点是需要找出pivot的位置,然后递归对其进行上面的操作即可,在这里我们需要合理选择pivot的位置,可以使得执行效率最高!

#include <iostream>
#include <string>
using namespace std;

int partition(int arr[], int low, int high){
int pivot = arr[low];
while (low < high){
while (low < high&&arr[high] >= pivot) --high;
arr[low] = arr[high];
while (low < high&&arr[low] <= pivot) ++low;
arr[high] = arr[low];
}
arr[low] = pivot;
return low;
}
void QSort(int arr[], int low, int high){
if (low < high){
int partiloc = partition(arr, low, high);
QSort(arr, low, partiloc-1);
QSort(arr, partiloc + 1, high);
}
}
void QuickSort(int arr[],int arr_len){
QSort(arr, 0, arr_len-1);
}
int main(){
int arr[] = { 10, 100, 30, 50, 40, 20, 1, 300 };
QuickSort(arr, 8);
for (int i = 0; i < 8; i++){
cout << arr[i] << " ";
}
return 0;
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐