冒泡排序
数组间相邻两个元素互相比较,将大的交换到两者之前 一次循环让一个数据移动到最终该出现的位置上 最大的放到当前序列的最后一项,序列长度每次减1
cpp
#include <iostream>
using namespace std;
int main() {
int num[] = {5,4,3,2,1};
int n = 5;
int temp = 0;
for(int i = 1;i<=n-1;i++){//进行n-1次排序
for(int j = 0;j<=n-1-i;j++){//每次排序到倒数第n-i个元素,因为数组下标从0开始,用<=还要再减1
if(num[j] > num[j+1]){
temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
for(auto &i : num){
cout<<i<<" ";
}
}选择排序
时间复杂度
cpp
int a[5] = {2,5,8,1,4}
int n = 5;
for(int i = 0;i<n-1;i++){
int k = i;
for(int j = i+1;j<n;j++){
if(a[j] < a[k]) k = j;
}
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}插入排序
时间复杂度
cpp
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int array[] = {5,2,4,6,1,3};
int len = sizeof(array)/sizeof(array[0]);
for(int i = 1;i<len;i++){
int key = array[i];
int j = i - 1;
while(j >= 0 && array[j] > key){
array[j+1] = array[j];
j--;
}
array[j+1] = key;
}
for(auto &i:array){
cout << i << " ";
}
return 0;
}归并排序
OI WIki https://oi-wiki.org/basic/merge-sort 归并可以使用分治思想实现,将每次归并的两个块之间互相比较,一直到整个序列有序,时间复杂度merge函数实现:merge( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first ); 可以用递归实现也可以用倍增写。