排序(啊哈!算法)
一.桶排序

#include<iostream>
using namespace std;
int a[1001];
int b[10];
int main(){
int count=1;
for(int i=0;i<10;i++){
cin>>b[i];
a[b[i]]+=1;
}
for(int i=1000;i>=0;i--){
if(a[i]){
for(int j=0;j<a[i];j++){
if(count!=10){
cout<<i<<' ';
}else{
cout<<i<<endl;
}
count++;
}
}
}
return 0;
//时间复杂度O(10+1000+10)
//忽略较小的常数随意时间复杂度为O(1000)
}
二.冒泡排序

N个数需要N-1趟,每趟比较N-i次(i是趟数)
#include<iostream>
using namespace std;
int a[10];
int main(){
int temp=0;
for(int i=0;i<10;i++){
cin>>a[i];
}
for(int i=0;i<10-1;i++){
for(int j=0;j<10-i;j++){
if(a[j]<a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<10;i++){
if(i!=9){
cout<<a[i]<<' ';
}else{
cout<<a[i]<<endl;
}
}
return 0;
}
例子:
输出姓名成绩,按成绩进行排序,解决了桶排序遗留问题
#include<iostream> using namespace std; struct student{ char name[21]; int score; }; struct student a[100]; int n; int main(){ int temp=0; cin>>n; cout<<endl; for(int i=1;i<=n;i++){ cin>>a[i].name>>a[i].score; } for(int i=1;i<=n-1;i++){ for(int j=1;j<=n-i;j++){ if(a[j].score<a[j+1].score){ temp=a[j+1].score; a[j+1].score=a[j].score; a[j].score=temp; } } } cout<<endl; for(int i=1;i<=n;i++){ cout<<a[i].name<<':'<<a[i].score<<endl; } return 0; }
3.快速排序




#include<iostream> using namespace std; int a[100]; int n; void quicksort(int i,int j){ if(i>j){ return; } int temp=a[i]; int left=i; int right=j; while(i != j){ while(a[j]>=temp && i<j){ j--; } while(a[i]<=temp && i<j){ i++; } int k=a[i]; a[i]=a[j]; a[j]=k; } int k=a[left]; a[left]=a[i]; a[i]=k; quicksort(1,i-1); quicksort(i+1,right); } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } quicksort(1,n); for(int i=1;i<=n;i++){ if(i!=n){ cout<<a[i]<<' '; }else{ cout<<a[i]<<endl; } } return 0; }
例题:输入N个数,对其”去重“然后排序
#include<iostream> using namespace std; int a[100]; int n; void quicksort(int i,int j){ int temp=a[i]; int left=i; int right=j; if(i>j){ return; } while(i<j){ while(a[j]>=temp && i<j){ j--; } while(a[i]<=temp && i<j){ i++; } int k=a[i]; a[i]=a[j]; a[j]=k; } int k=a[left]; a[left]=a[i]; a[i]=k; quicksort(left,i-1); quicksort(i+1,right); } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } quicksort(1,n); for(int i=1;i<=n;i++){ if(a[i] != a[i-1]){ if(i!=n){ cout<<a[i]<<' '; }else{ cout<<a[i]<<endl; } } } return 0; }

浙公网安备 33010602011771号