数组升序排列
#include<stdio.h>
int main()
{
int a[1000];
int i,j,n,t,k=0;
scanf("%d",&n); //n值输入;
for(i=0;i<n;i++)
scanf("%d",&a[i]); //n个int类型的数据输入;
for(j=n-1;j>0;j--)
for(i=0;i<j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
} //嵌套循环解释如下(冒泡排序);
for(i=0;i<n;i++)
{
printf("%d ",a[i]); //排好序的int类型数据输出;
k++;
if(k%8==0)
printf("\n"); //输出时8个数据一行;
}
return 0;
}
冒泡排序就是从左到右比较相邻两个元素的大小,以升序为例,第一轮比较时如果前一个元素比后一个元素大,就交换两个元素的位置,依次比较,直到最后一个元素最大。第二轮比较时倒数第二个元素就会为第二大的数,就这样一轮一轮的比较,最后实现升序排列。
例如,数组中元素为22,44,77,33,88,11,55,66
第一轮比较如下,
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | |
原数组 | 22 | 44 | 77 | 33 | 88 | 11 | 55 | 66 |
a[0]和a[1]比较 | 22 | 44 | 77 | 33 | 88 | 11 | 55 | 66 |
a[1]和a[2]比较 | 22 | 44 | 77 | 33 | 88 | 11 | 55 | 66 |
a[2]和a[3]比较 | 22 | 44 | 33 | 77 | 88 | 11 | 55 | 66 |
a[3]和a[4]比较 | 22 | 44 | 33 | 77 | 88 | 11 | 55 | 66 |
a[4]和a[5]比较 | 22 | 44 | 33 | 77 | 11 | 88 | 55 | 66 |
a[5]和a[6]比较 | 22 | 44 | 33 | 77 | 11 | 55 | 88 | 66 |
a[6]和a[7]比较 | 22 | 44 | 33 | 77 | 11 | 55 | 66 | 88 |
由表可得,第一轮比较将最大数88置于最后一个位置a[7]。
第二轮比较如下,
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | |
第一轮所得数组 | 22 | 44 | 33 | 77 | 11 | 55 | 66 | 88 |
a[0]和a[1]比较 | 22 | 44 | 33 | 77 | 11 | 55 | 66 | 88 |
a[1]和a[2]比较 | 22 | 33 | 44 | 77 | 11 | 55 | 66 | 88 |
a[2]和a[3]比较 | 22 | 33 | 44 | 77 | 11 | 55 | 66 | 88 |
a[3]和a[4]比较 | 22 | 33 | 44 | 11 | 77 | 55 | 66 | 88 |
a[4]和a[5]比较 | 22 | 33 | 44 | 11 | 55 | 77 | 66 | 88 |
a[5]和a[6]比较 | 22 | 33 | 44 | 11 | 55 | 66 | 77 | 88 |
由表可得,第二轮比较将第二大的数置于倒数第二个位置a[6]。
依次几轮比较可得出
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] |
11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 |
文章评论