冒泡、选择、插入和希尔排序模板

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<vector>
using std::vector;
#include<algorithm>
using std::random_shuffle;
using std::swap;

void bubbleSort(vector<int>v);
void printVector(vector<int>v);
void selectionSort(vector<int>v);
void insertionSort(vector<int>v);
void shellSort(vector<int>v);

int main()
{
	vector<int>v;

	for (int i = 0; i < 30; ++i)
	{
		v.emplace_back(i + 1);
	}

	random_shuffle(v.begin(), v.end());

	printVector(v);

	//冒泡排序

	bubbleSort(v);

	//选择排序

	selectionSort(v);

	//插入排序

	insertionSort(v);

	//希尔排序

	shellSort(v);
}

void printVector(vector<int>v)
{
	for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void bubbleSort(vector<int>v)
{
	cout << "冒泡排序,升序:" << endl;

	for (int i = 0; i < v.size() - 1; ++i)
	{
		bool flag = true;

		for (int j = 0; j < v.size() - i - 1; ++j)
		{
			if (v[j] > v[j+1])
			{
				swap(v[j+1], v[j]);
				flag = false;
			}
		}

		if (flag)
		{
			break;
		}
	}

	printVector(v);
}

void selectionSort(vector<int>v)
{
	cout << "选择排序,降序:" << endl;

	for (int i = 0; i < v.size(); ++i)
	{
		for (int j = i + 1; j < v.size(); ++j)
		{
			if (v[i] < v[j])
			{
				swap(v[i], v[j]);
			}
		}
	}

	printVector(v);
}

void insertionSort(vector<int>v)
{
	cout << "插入排序,升序:" << endl;

	for (int i = 1; i < v.size(); ++i)
	{
		int temp = v[i];
		int j = i - 1;

		for (; j >= 0; --j)
		{
			if (v[j] > temp)
			{
				v[j + 1] = v[j];
			}
			else
			{
				break;
			}
		}

		v[j + 1] = temp;
	}

	printVector(v);
}

void shellSort(vector<int>v)
{
	cout << "希尔排序,升序:" << endl;

	int gap = v.size();

	while (gap != 1)
	{
		gap = gap / 3 + 1;

		for (int i = gap; i <v.size (); ++i)
		{
			int temp = v[i];
			int j = i - gap;

			for (; j >= 0; j -= gap)
			{
				if (v[j] > temp)
				{
					v[j + gap] = v[j];
				}
				else
				{
					break;
				}
			}

			v[j + gap] = temp;
		}
	}

	printVector(v);
}

 有时间再做一个有讲解的吧。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值