接口类
sort.h文件
#ifndef _SORT__H_
#define _SORT__H_
using namespace std;
class Sort
{
public:
void mergesort(vector<int>& nums,int s, int e);
void quicksort(vector<int>&nums,int s,int e);
void bubblesort(vector<int>&nums);
void heapsort(vector<int>&nums);
void sort(std::vector<int>& v);
void show(std::vector<int>& v);
};
#endif
接口类的使用
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
#include "sort.h"
using namespace std;
int main(){
cout<<"----------------before 12:28 ms-------------------"<<endl;
string line;
getline(cin,line);
stringstream ss(line);
int val;
vector<int> nums;
while(ss>>val){
nums.push_back(val);
}
Sort x;
x.sort(nums);
cout<<"----------------after 12:28 ms-------------------"<<endl;
x.show(nums);
return 0;
}
接口类的实现
#include <iostream>
#include <vector>
#include <algorithm>
#include "sort.h"
using namespace std;
//1.实现快速排序
int partition(vector<int>& nums,int s,int e){
int i=s, j=e-1;
int cmp = nums[e];
while(i<=j){
while(i<=j && nums[i]<=cmp) ++i;
while(i<=j && nums[j]>=cmp) --j;
if(i<j) swap(nums[i],nums[j]);
}
swap(nums[i],nums[e]);
return i;
}
void Sort::quicksort(vector<int>& nums,int s,int e){
if(s<e){
int mid = partition(nums,s,e);
quicksort(nums,s,mid-1);
quicksort(nums,mid+1,e);
}
}
//2.实现冒泡排序
void Sort::bubblesort(vector<int>& nums){
int len = nums.size();
int flag = true;
for(int i=len-1;flag&&i>0;--i){
flag = false;
for(int j=0;j<i;++j){
if(nums[j]>nums[j+1]){
swap(nums[j],nums[j+1]);
flag = true;
}
}
}
}
//3.实现堆排序
void heapify(vector<int>& nums,int pos,int len){
int left, right,maxpos=pos;
while(true){
left = 2*pos+1;
right = 2*pos+2;
if(left<len) maxpos = nums[left]>nums[maxpos] ? left : maxpos;
if(right<len) maxpos = nums[right]>nums[maxpos] ? right : maxpos;
if(maxpos==pos) break;
swap(nums[maxpos],nums[pos]);
pos = maxpos;
}
}
void Sort::heapsort(vector<int>& nums){
int len = nums.size();
for(int i=(len-2)/2;i>=0;--i){
heapify(nums,i,len);
}
while(len>1){
swap(nums[0],nums[--len]);
heapify(nums,0,len);
}
}
//4.实现归并排序
void merge(vector<int>&nums,int s,int mid,int e,vector<int>& help){
int i=s, j=mid+1;
int inc = s;
while(i<=mid && j<=e){
int val = nums[i]<=nums[j] ? nums[i++] : nums[j++];
help[inc++] = val;
}
while(i<=mid) help[inc++] = nums[i++];
while(j<=e) help[inc++] = nums[j++];
copy(help.begin()+s,help.begin()+e+1,nums.begin()+s);
}
void Sort::mergesort(vector<int>& nums,int s ,int e){
if(s<e){
int mid = (s+e)/2;
vector<int> help(nums.size(),0);
mergesort(nums,s,mid);
mergesort(nums,mid+1,e);
merge(nums,s,mid,e,help);
}
}
//下面两个普通接口
void Sort::show(vector<int>& nums){
for(int& val:nums)
cout<<val<<' ';
cout<<endl;
}
void Sort::sort(std::vector<int>& v){
if(v.empty()) return ;
std::vector<int> msort(v.begin(),v.end());
std::vector<int> qusort(v.begin(),v.end());
std::vector<int> hesort(v.begin(),v.end());
std::vector<int> bsort(v.begin(),v.end());
//排序
mergesort(msort,0,msort.size()-1);
quicksort(qusort,0,qusort.size()-1);
heapsort(hesort);
bubblesort(bsort);
//打印排序后数组
cout<<"------mergesort------"<<endl;
show(msort);
cout<<"------quicksort------"<<endl;
show(qusort);
cout<<"------heapsort------"<<endl;
show(hesort);
cout<<"------bubblesort------"<<endl;
show(bsort);
}
示例: