排序
- 冒泡排序
- 选择排序
- 插入排序
冒泡排序(Bubble sort)
冒泡排序是把N个数通过N-1轮排序,升序中大的往下沉,小的往上浮。降序中大的往上浮,小的往下沉。
下面例子为升序。
它的时间复杂度与数据有关:
最优 | O(n) |
---|---|
最坏 | O(n2) |
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)cin >> a[i];
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(a[j]>a[j+1])swap(a[j],a[j+1]);
}
}
for(int i=0;i<n;i++)cout << a[i] <<' ';
return 0;
}
选择排序(selection sort)
进行n轮选择,选择其中最小(最大)的数据放在排好数据的后面。
它的时间复杂度与数据没有关系。为O(n2)。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,min;
cin>>n;
int a[n];
for(int i=0;i<n;i++)cin >> a[i];
for(int i=0;i<n;i++){
min=i;
for(int j=i;j<n;j++){
if(a[min]>a[j])
min=j;
}
if(min!=i)swap(a[min],a[i]);
}
for(int i=0;i<n;i++)cout << a[i] <<' ';
return 0;
}
插入排序(Insert sort)
它的时间复杂度与数据有关:
最优 | O(n) |
---|---|
最坏 | O(n2) |
~~~cpp
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,key;
cin>>n;
int a[n];
for(int i=0;i<n;i++)cin >> a[i];
for(int i=1;i<n;i++){
key=i;
for(;key>=1&&a[key]<a[key-1];key--){
swap(a[key],a[key-1]);
}
}
for(int i=0;i<n;i++)cout << a[i] <<' ';
return 0;
}