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;
}