桶排序在时间和空间占用上可以说是非常巨大,比如要对一组五个数字排序,但里边有一个非常大的数字1999909,这个时候就需要申请一个非常大的数组,a[1999909],可见咋空间复杂度和时间复杂度非常高,而且非常浪费,这个时候冒泡排序法就展现出它的特点了:
冒泡排序::
这里有一个形象的代名词:邻居好说话,就是说相邻的两个数交换,冒泡排序的原理是每一趟只能将一个数归位,这就体现出它的时间空间复杂度。有n个数字的话,就需要最多n-1趟(次)排序。
#include <stdio.h>
int main()
{
int a[100], i, j, t, n;
scanf("%d", &n); //输入一个数n,表示接下来有n个数
for(i=1;i<=n;i++) //循环读入n个数到数组a中
scanf("%d", &a[i]);
for (i = 1; i <= n - 1; i++) //n个数排序,只用进行n-1趟
{
for (j = 1; j <= n - i; j++) //从第1位开始比较直到最后一个尚未归位的数。
{
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;
}
这就是冒泡排序,核心内容就是两个for循环。进行n-1次,每次进行几次交换。