歸併+快排+堆排+冒泡

接口類

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);
}

示例:
排序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章