冒泡 插入 选择 快速 归并排序代码

仅作记录,若有错误指正修改,谢谢。

#include<iostream>
#include<vector>
class solution {
public:
	template<class T>
	void swap(T &a, T &b) {
		T tmp = a;
		a = b;
		b = tmp;
	}
	void Bullbesort(vector<int>& nums) {
		if (nums.size() <= 1)return;
		bool is_swap;
		for (int i = 0; i < nums.size()-1;i++){
			is_swap = false;
			for (int j = 0; j < nums.size() - i - 1;j++) {
				if (nums[j] > nums[j + 1]) {
					swap(nums[j],nums[j+1]);
					is_swap = true;
				}
			}
			if (!is_swap) break;
		}
	}
	void Insertsort(vector<int>& nums){
		if (nums.size() <= 1)return;
		for (int i = 0; i < nums.size(); i++) {
			for (int j = i; j > 0 && nums[j] < nums[j - 1];j--) {
				swap(nums[j], nums[j - 1]);
			}
		}
	}
	void Selectsort(vector<int>& nums) {
		if (nums.size() <= 1)return;
		int mid;
		for (int i = 0; i < nums.size()-1; i++) {
			mid = i;
			for (int j = i; j < nums.size();j++) {
				if (nums[j] < nums[i])
					mid=j;
			}
			swap(nums[mid], nums[i]);
		}	
	}
	//快排
	void Quicksort(vector<int>& nums,int l,int r) {
		if (l+1>=r)return;//数组越界
		int first = l, last = r - 1, key = nums[first];
		while (first < last) {
			while (first < last && nums[last] >= key) --last;//右指针 从右向左扫描 将?于piv的放到左边
			nums[first] = nums[last];
			while (first < last && nums[first] <= key) ++first;//左指针 从左向右扫描 将?于piv的放到右边
			nums[last] = nums[first];
		}
		nums[first] = key;//更新pivot
		Quicksort(nums, 0,first);
		Quicksort(nums, first + 1, r);//递归排序 //以L为中间值,分左右两部分递归调?
	}
	void mergecount(vector<int>& nums,int l,int mid,int r) {
		vector<int> tmp;
		int b1 = l,e1=mid,b2=mid+1,e2=r;
		while (b1 <= e1 && b2 <= e2) {
			if (nums[b1] < nums[b2]) {
				tmp.emplace_back(nums[b1]);
				++b1;
			}
			else {
				tmp.emplace_back(nums[b2]);
				++b2;
			}
		}
		while (b1 <=e1) {
			tmp.emplace_back(nums[b1++]);
		}
		while (b2 <=e2) {
			tmp.emplace_back(nums[b2++]);
		}
		for (int p = 0; p < tmp.size(); ++p) {
			nums[l + p] = tmp[p];
		}
		tmp.clear();
	}
	void mergesort(vector<int>& nums,int l,int r) {
		if (l >= r)return;
		int mid = l + (r - l) / 2;
		mergesort(nums, l, mid);
		mergesort(nums, mid + 1, r);
		mergecount(nums,l,mid,r);
	}
	
};

int main(){
	vector<int> num1 = { 1,6,5,4,3,2 };
	vector<int> num2 = { 1,6,5,4,3,2 };
	vector<int> num3 = { 1,6,5,4,3,2 };
	vector<int> num4 = { 1,6,5,4,3,2 };
	vector<int> num5 = { 1,6,5,4,3,2 };
	solution a;
	a.Bullbesort(num1);	//冒泡排序
	cout << "num1:";
	for (int i = 0; i < num1.size(); i++) {
		cout << num1[i] << ' ';
	}
	cout << endl;
	a.Insertsort(num2);	//插入排序
	cout << "num2:";
	for (int i = 0; i < num2.size(); i++) {
		cout << num2[i] << ' ';
	}
	cout << endl;
	a.Selectsort(num3);	//选择排序
	cout << "num3:";
	for (int i = 0; i < num3.size(); i++) {
		cout << num3[i] << ' ';
	}
	cout << endl;
	a.Quicksort(num4, 0, num4.size());//快排
	cout << "num4:";
	for (int i = 0; i < num4.size(); i++) {
		cout << num4[i] << ' ';
	}
	cout << endl;
	a.mergesort(num5, 0, num5.size()-1);	//归并排序
	cout << "num5:";
	for (int i = 0; i < num5.size(); i++) {
		cout << num5[i] << ' ';
	}
	cout << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_58530510/article/details/131292472