快速排序–递归版
#include <iostream>
using namespace std;
int partition(int *arr, int left, int right){
int temp = arr[left];
while(left < right){
while(left<right && arr[right]>=temp){
right--;
}
arr[left] = arr[right];
while(left<right && arr[left] <= temp){
left++;
}
arr[right] = arr[left];
}
arr[left] = templ;
return left;
}
void quick(int* arr, int left, int right){
if(left < right){
int pivot = partition(arr, left, right);
quick(arr, left, pivot-1);
quick(arr, pivot+1, right);
}
}
void quick_sort(int* arr, int len){
quick(arr, 0, len-1);
}
int main(){
int a[] = {11, 33, 22, 15, 67, 43};
int len = sizoef(a)/sizeof(a[0]);
quick_sort(a, len);
for(int i=0; i < len; i++){
cout << a[i] << " ";
}
cout << endl;
}
快速排序-非递归版
#include <iostream>
#include <stack>
using namespace std;
int partition(int *arr, int left, int right){
int temp = arr[left];
while(left < right){
while(left<right && arr[right]>=temp){
right--;
}
arr[left] = arr[right];
while(left<right && arr[left] <= temp){
left++;
}
arr[right] = arr[left];
}
arr[left] = templ;
return left;
}
void quick(int *arr, int left, int right){
stack<int> s;
s.push(left);
s.push(right);
while(!s.empty()){
int right = s.top();
s.pop();
int left = s.top();
s.pop();
int pivot = partition(arr, left, right);
if(pivot-1>left){
s.push(left);
s.push(pivot-1);
}
if(pivot+1<right){
s.push(pivot + 1);
s.push(right);
}
}
}
void quick_sort(int* arr, int len){
quick(arr, 0, len-1);
}
int main(){
int a[] = {11, 33, 22, 15, 67, 43};
int len = sizoef(a)/sizeof(a[0]);
quick_sort(a, len);
for(int i=0; i < len; i++){
cout << a[i] << " ";
}
cout << endl;
}