冒泡排序
#include <iostream>
using namespace std;
#include<vector>
//冒泡排序 稳定排序 复杂度o(n2)
void bubbleSort(vector<int>& v) {
for (int i = 0; i < v.size(); i++) {
for (int j = v.size() - 1; j > i; j--) {
if (v[j] < v[j - 1]) {
int temp = v[j];
v[j] = v[j - 1];
v[j - 1] = temp;
}
}
}
}
int main() {
vector<int>v{ 2,4,6,8,-3,-2,-1,7,2 };
bubbleSort(v);
for (auto num : v)
cout << num << " ";
}
选择排序
//选择排序 不稳定排序 复杂度o(n2)
void selectionSort(vector<int>& v) {
for (int i = 0; i < v.size(); i++) {
int min=i;
for (int j = i + 1; j < v.size(); j++) {
if (v[j] < v[min])
min = j;
}
swap(v[min], v[i]);
}
}
直接插入排序
//插入排序 稳定排序 复杂度o(n2)
void insertionSort(vector<int>& v) {
for (int i = 1; i < v.size(); i++) {
int temp = v[i],j;
for (j = i - 1; j >= 0 && v[j] > temp; j--) {
v[j + 1] = v[j];
}
v[j + 1] = temp;
}
}
折半插入排序
//折半插入排序 稳定排序 复杂度o(n2)
void insertionSort(vector<int>& v) {
for (int i = 1; i < v.size(); i++) {
int left = 0, right = i-1;
while (left <= right) {
int mid = (left + right) / 2;
if (v[mid] <= v[i])
left = mid+1;
else
right = mid-1;
}
int temp = v[i];
for (int j = i-1 ; j >= left; j--) {
v[j+1] = v[j];
}
v[left] = temp;
}
}
待更,快速排序,基数排序,桶排序,归并排序