排序
一、桶排序
顾名思义,一个萝卜一个坑,对应任何一个数字都开一个数组下标与之对应。
排序时间复杂度较小。但是空间复杂度可能会很高。因为即使有2个数字,1和100000也要开到1~1000001个数组空间。
同时也无法处理浮点数。
适用于密集型整数数据。
#include <iostream>
using namespace std;
int book[10001];
int n;
int t;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>t;
book[t]++;
}
for(int i=1;i<=10000;i++){
for(int j=1;j<=book[i];j++){
cout<<i<<" ";
}
}
return 0;
}
排序后如图:
二、冒泡排序
即相邻两个进行比较,位置不对就调换过来。
核心思想:
每次排序后对N个数字进行排序,需要进行N-1次,而每一次排序之后第i个就归位了。
#include <iostream>
using namespace std;
int a[10001];
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n-1;i++){
for(int j=1;j<=n-i;j++){
if(a[j]<a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
排序后: