C++排序算法

1.冒泡排序

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

void BubbleSort(vector<int> &arr, int len)
{
	int temp = {0};
	for (int i = 0; i < len - 1; ++i)
	{
		for (int j = 0; j < len - 1 - i; ++j)
		{
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
	}
}
int main() {
	vector<int> B;
	cout << "请输入3个数字!" << endl;
	int temp;
	for (int i = 0; i < 3; i++) {
		cin >> temp;
		B.push_back(temp);
	}
	int l = B.size();
	BubbleSort(B, l);
	vector<int>::iterator it;
	for (it = B.begin(); it != B.end(); it++)
		cout << *it << endl;
	system("pause");
	return 0;
}

2.选择排序

void selectSort(vector<int> &a, int len)
{

	int minindex, temp;
	for (int i = 0; i < len - 1; i++)
	{
		minindex = i;
		for (int j = i + 1; j < len; j++)
		{
			if (a[j] < a[minindex])
				minindex = j;
		}
		temp = a[i];
		a[i] = a[minindex];
		a[minindex] = temp;
	}
}

3.插入排序

void insertSort(vector<int> &arr, int n)
{
	int i, j, key;
	for (i = 1; i < n; i++)
	{
		j = i;
		while (j-1 >= 0 && arr[j-1] > arr[j])
		{
			int temp = arr[j-1];
			arr[j - 1] = arr[j];
			arr[j] = temp;
			j--;
		}
	}
}

4.快排

void quickSort(vector<int>  &root, int low, int high) //high为长度-1
{
	if (low >= high){
		return;
	}
	int pat = root[low];
	int i = low;
	int j = high;
	while (i < j){
		while (i<j && root[j]>pat)
			j--;
		root[i] = root[j];
		while (i < j && root[i] < pat)
			i++;
		root[j] = root[i];
	}
	root[i] = pat;
	quickSort(root, low, i - 1);
	quickSort(root, i + 1, high);
}

5.希尔排序

void shell_sort(vector<int>  &root, int l)
{
	int gap = l / 2;
	while (gap > 0) {
		for (int i = gap; i < l; i++) {
			int j = i;
			while(j >= gap && root[j-gap] > root[j]){
				int temp = root[j];
				root[j] = root[j - gap];
				root[j - gap] = temp;
				j -= gap;
			}
		}
		gap = gap / 2;
	}
}

6.归并排序

void _sort(vector<int> &v, int begin, int end);
void merge_sort(vector<int> &v, int begin, int mid, int end);

void _sort(vector<int>&v, int begin, int end) //end为长度减1
{
	if (begin < end)
	{
		int mid = (begin + end) / 2;
		_sort(v, begin, mid);
		_sort(v, mid + 1, end);
		merge_sort(v, begin, mid, end);
	}
	return;
}

void merge_sort(vector<int>&v, int begin, int mid, int end)//从小到大排列
{

	vector<int>temp;
	int l = begin, m = mid + 1, r = end;
	while (l <= mid && m <= r)
	{
		if (v.at(l) <= v.at(m)) { temp.push_back(v.at(l)); ++l; }
		else { temp.push_back(v.at(m)); ++m; }
	}
	while (l <= mid)
		temp.push_back(v.at(l++));
	while (m <= r)
		temp.push_back(v.at(m++));
	for (int i = 0; i < temp.size(); ++i)
		v.at(i + begin) = temp.at(i);//注意这里一定要从begin开始
	return;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值