冒泡排序,快速排序,归并排序

冒泡排序

#include <iostream>
#include <vector>

using namespace std;

void mysort(vector<int>& da) {
	int n = da.size();
	for (int i=0; i<n; ++i) {
		for (int j=0; j<n-i-1; ++j) {
			if (da[j]>da[j+1]) swap(da[j], da[j+1]);
		}
	}
}

int main()
{
	vector<int> nums{9,8,7,4,5,6,2,1,3};
	mysort(nums);
	for (int i:nums) cout<<i<<' ';
	cout<<endl;
   	return 0;
}

快速排序

#include <iostream>
#include <vector>

using namespace std;

void mysort(vector<int>& da, int s, int e) {
	if (s>=e) return ;
	int i=s, j=e, tmp=da[s];
	while(i<j) {
		while (i<j && da[j]>=tmp) j--;
		while (i<j && da[i]<=tmp) i++;
		swap(da[i], da[j]);
	}
	swap(da[s], da[i]);
	mysort(da, s, i-1);
	mysort(da, i+1, e);
}

int main()
{
	vector<int> nums{9,8,7,4,5,6,2,1,3};
	mysort(nums, 0, nums.size()-1);
	for (int i:nums) cout<<i<<' ';
	cout<<endl;
   	return 0;
}

归并排序

#include <iostream>
#include <vector>

using namespace std;

void mysort(vector<int>& da, int s, int e) {
	if (s>=e) return ;
	int mid = s+((e-s)>>2);
	mysort(da, s, mid);
	mysort(da, mid+1, e);
	
	vector<int> tmp;
	int i=s, j=mid+1;
	while(i<=mid && j<=e) {
		if (da[i]<=da[j]) tmp.push_back(da[i++]);
		else tmp.push_back(da[j++]);
	}
	
    for(; i<=mid; ++i) tmp.push_back(da[i]);
	for(; j<=e; ++j)   tmp.push_back(da[j]);
	
	for (int k=s; k<=e; ++k) da[k]=tmp[k-s];
}

int main()
{
	vector<int> nums{9,8,7,4,5,6,2,1,3};
	mysort(nums, 0, nums.size()-1);
	for (int i:nums) cout<<i<<' ';
	cout<<endl;
   	return 0;
}
posted @ 2019-07-24 18:05  narjaja  阅读(222)  评论(0编辑  收藏  举报