桶排序
我们创建一个一个数组,数组内存放的内容是我们对该数组对应的数字的计数,然后我们按照计算对数组的对应的值进行输出,这样我们就能输入的值,进行排序。因为我们的桶是排好序列的。
#include <stdio.h>
int main(){
int a[11],i,t,j;
for (i=0;i<=10;i++){//创建一个数组,给这个数组初始化,每个位置都赋值为0
a[i]=0;
}
for (i=1;i<=5;i++){//从键盘录入5个数,对应数字的筒,里面存的数字递增一个数字
scanf("%d",&t);
a[t]++;
}
for (i=0;i<=11;i++)//开始扫描这个数组,桶内递增几个数字,将这个数字,按次数输出
for (j=1; j<=a[i]; j++)
printf("%d",i);
getchar();
getchar();
return 0;
}
桶排序的缺点:
- 我们假如要排列的数字较大的时候,我们就需要这个数字对应的桶
- 我们不可以对小数进行排序
- 只能输出对数字的排序,不能输出对数组以外的信息进行输出
冒泡排序
冒泡排序就是对一组数组,进行前后值的比较,比如我们需要对数组进行从小到大的排序的时候,我们只需要从头开始,将前后值进行比较,相比较之后,大的值排在后面,依次进行就可以达到目的。我们有n个数字的时候,就会进行n-1趟,每次都是n-i次交换,i是第几趟,因为我们排序过一趟的话,就不需要动最后一个值,排序过两趟的话就不需要对最后面的两个值进行排序。
#include <stdio.h>
int main(){
int a[100],n,i,j,t;
scanf("%d",&n);
for (i=1; i<=n; i++) {
scanf("%d",&a[i]);
}
for (i=1; i<=n-1; i++) {
for (j=1; j<=n-i; j++) {
if (a[j]<a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for (i=1; i<=n; i++) {
printf("%d",a[i]);
}
getchar();
getchar();
return 0;
}