之前的那个排序确实能实现降序的排列,但是存在着浪费空间,无法进行小数排序等缺点,今天我们以冒泡排序来尝试进行降序排列。
利用冒泡排序进行降序排列
#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++)
{
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;
}
冒泡排序的核心部分是双重嵌套循环,其时间复杂度为O(N²)。历年来,许多大牛都想对其改进,都不了了之。
另若想让其正序排列只需要将
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-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;}
}
}
输入 | 输出 |
---|---|
5 1 2 3 4 5 | 5 4 3 2 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++)
{
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;
}
输入 | 输出 |
---|---|
5 1 2 3 4 5 | 1 2 3 4 5 |