您的位置:首页 > 其它

冒泡排序<我的算法成长经历>

2018-01-24 12:12 239 查看
桶排序在时间和空间占用上可以说是非常巨大,比如要对一组五个数字排序,但里边有一个非常大的数字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次,每次进行几次交换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: