一、选择排序
for(int i=0;i<n;i++){
k=i;
for(int j=i+1;j<n;j++){
if(a[j]<a[k]) k=j;
}
if(k!=i) swap(a[i],a[k]);
}
时间复杂度:O(n^2)
稳定性:不稳定
二、冒泡排序(2.0版)
bool flag;
for(int i=0;i<n-1;i++){
flag=true;
for(int j=0;j<n-i;j++){
if(a[j]>a[j+1]){
swap(a[j],a[j+1]);
flag=false;
}
}
if(flag=true) break;
}
时间复杂度:O(n^2)
稳定性:稳定
三、桶排序
const int k=INF; //这里的k指n的上界
for(int i=1;i<=n;i++){
scanf("%d",&k);
b[k]=k;
}
for(int i=0;i<=k;i++){
while(b[i]>0){
printf("%d ",i);
b[i]--;
}
}
时间复杂度:O(n)
注:还有O(n)的辅助空间
稳定性:稳定