#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;
}
排序算法
最新推荐文章于 2023-06-11 17:18:55 发布