#include<iostream>
#include<memory>
#include<vector>
#define MAX 100
using namespace std;
int src[MAX];
void init(){
memset(src,0,MAX);
for(int i=0;i<10;i++){
src[i] = i+1;
}
}
void swap(int i,int j){
int tmp = src[i];
src[i] = src[j];
src[j] = tmp;
}
/**
* 递归的快排
*/
void quickSort(int start,int end){
if(start>=end||end<0){
return ;
}
int l=start+1, r = end;
while(l<r){
while(l<r&&src[start] > src[l])l++;
if(src[start] < src[l]){
while(r>l&&src[start] < src[r])r--;
if(src[start] > src[r]){
swap(l,r);
l++;r--;
}
}
}
if(src[start] > src[l]){
swap(start,l);
}else{
l=l-1;
swap(start,l);
}
quickSort(start,l-1);
quickSort(l+1,end);
}
/**
* 非递归的快排
**/
void quickSort2(int*src , int start,int n){
vector< pair<int,int>* > s;
s.push_back(new pair<int,int>(start,n));
while(s.size()>0){
cout<<s.size()<<endl;
pair<int,int>* tmp = s.back();
s.pop_back();
int l = tmp->first,r = tmp ->second;
start = l;
l++;
if(l>=r||r<0){
continue;
}
while(l<r){
while(l<r&&src[start] > src[l])l++;
if(src[start] < src[l]){
while(r>l&&src[start] < src[r])r--;
if(src[start] > src[r]){
swap(l,r);
l++;r--;
}
}
}
if(src[start] > src[l]){
swap(start,l);
}else{
l=l-1;
swap(start,l);
}
s.push_back(new pair<int,int>(tmp->first,l-1));
s.push_back(new pair<int,int>(l+1,tmp->second));
delete tmp;
}
}
int main(){
init();
quickSort2(src,0,10);
for(int i=0;i<11;i++){
cout<<src[i]<<" ";
}
cout<<endl;
pair<int,int > test(1,2);
cout<< test.first<<endl;
cout<< test.second<<endl;
return 0;
}
算法复习之快排(C++版)
最新推荐文章于 2024-06-22 23:42:38 发布