这篇文章主要介绍了啊哈算法的排序问题,包括桶排序、快速排序、冒泡排序
桶排序
算法描述
这个算法好比有11个桶,编号从0~10。每出现一个数,就在对应编号的桶里放一个小旗子。最后只要数数每个桶中有几个小旗子就可以了。例如2号桶中有2个旗子,表示数字2出现了2次。
问题描述
班上有5个同学,输入5个同学的分数(满分是10分),按从大到小输出5个同学的分数
输入数据
5 3 5 2 8
输出数据
8 5 5 3 2
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include<stdio.h> #include<iostream> using namespace std; int main(){ int a[11]={0},t; for(int i=0;i<5;i++){ cin>>t; a[t]++; } for(int i=0;i<10;i++){ for(int j=0;j<a[i];j++){ cout<<i<<" "; } } getchar();getchar(); return 0; }
|
快速排序
算法描述
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include<stdio.h> #include<iostream> using namespace std; int n,a[101]; void quicksort(int left,int right){ int temp,i ,j ,t; if(left>right){ return; } temp=a[left]; i=left; j=right; while(i!=j){ while(a[j]>=temp && i<j){ j--; } while(a[i]<=temp&&i<j){ i++; } if(i<j){ t=a[i]; a[i]=a[j]; a[j]=t; } } a[left]=a[i]; a[i]=temp; quicksort(left,i-1); quicksort(i+1,right); } int main(){ cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } quicksort(0,n-1); for(int i=0;i<n;i++){ cout<<a[i]<<" "; } return 0; }
|