排序算法

#include<iostream>
#include<vector>
using namespace std;
//冒泡排序
void BubbleSort(vector<int>& n)
{
	for (int i = n.size()-1; i >= 0; i--)
	{
		for (int j = 0; j < i; j++)
		{
			if (n[j]>n[j + 1])
			{
				int t = n[j];
				n[j] = n[j + 1];
				n[j + 1] = t;
			}
		}
	}
}

//简单选择排序
void SelectSort(vector<int>& n)
{
	int min_num = 0;
	for (int i = 0; i < n.size(); i++)
	{
		min_num = i;
		for (int j = i; j < n.size(); j++)
		{
			if (n[j] < n[min_num])
			{
				min_num = j;
			}
		}

		if (i != min_num)
		{
			int t = n[i];
			n[i] = n[min_num];
			n[min_num] = t;
		}
	}
}

//直接插入排序
void InsertSort(vector<int>& n)
{
	
	for (int i = 1; i < n.size(); i++)
	{
		int j = i - 1;
		int num = n[i];
		while (j >= 0&&n[j]>num)
		{
			if (n[j]>num)
			n[j + 1] = n[j];
			j--;
		}

		n[j + 1] = num;
	}
}

//希尔排序
void ShellSort(vector<int>& n)
{
	int len = n.size();
	int gap = len;
	int i, j;
	while (gap > 1)
	{
		gap = gap - 1;
		for (int i = 0; i < len; i++)
		{
			j = i + gap;
			if (j<len&&n[i]>n[j])
			{
				int temp = n[i];
				n[i] = n[j];
				n[j] = temp;
			}
		}
	}
}

//快速排序
void QuickSort(vector<int>& n,int left,int right)
{
	if (left > right)
	{
		return;
	}

	int num = n[left];
	int l = left;
	int r = right;
	while (l < r)
	{
		while (n[r]>num&&l < r)
		{
			r--;
		}
		if (l < r)
		{
			n[l++] = n[r];
		}
		while (n[l] < num&&l < r)
		{
			l++;
		}
		if (l < r)
		{
			n[r--] = n[l];
		}
	}

	n[r] = num;
	QuickSort(n, 0, r - 1);
	QuickSort(n, r + 1, right);

}

//堆排序
void Percdown(vector<int>& n, int root, int high)
{
	int child;
	int temp;

	for (temp = n[root]; (root * 2 + 1) < high; root = child)
	{
		child = root * 2 + 1;
		if (child != high - 1 && n[child] < n[child + 1])
		{
			child++;
		}
		if (temp < n[child])
		{
			n[root] = n[child];
		}
		else
		{
			break;
		}
	}
	n[root] = temp;
}
void HeapSort(vector<int>& n)
{
	int high = n.size();
	for (int i = high / 2; i >= 0; i--)
	{
		Percdown(n, i, high);
	}

	for (int i = high-1; i >= 0; i--)
	{
		int t = n[0];
		n[0] = n[i];
		n[i] = t;
		Percdown(n, 0, i);
	}
}

//归并排序 
void Print(vector<int>& n)
{
	for (int i = 0; i < n.size(); i++)
	{
		cout << n[i] << " ";
	}
	cout << endl;
}
int main()
{
	vector<int> n = { 1, 4, 3, 10, 6, 9, 7, 5, 2, 8 };

	//BubbleSort(n);
	//SelectSort(n);
	//InsertSort(n);
	//ShellSort(n);
	//QuickSort(n, 0, n.size() - 1);
	HeapSort(n);
	Print(n);
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值