2016.10.10
【题目描述】
冒泡排序
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
写一个冒泡排序的程序。
输入
先输入一个小于等于10000的正整数n,再输入n个整数,
输出
把输入数据按从小到大的顺序排序后输出,每个数字占一行。
输入样例
5
2
6
9
4
123
输出样例
2
4
6
9
123
【解题思路】
假设有n个元素,冒泡排序的思想就是进行n-1次遍历,每次遍历前1~n-i+1个数,如果大小关系不合适就交换。这样保证了每次能保证确定的最后一个数字是最大或最小的。时间复杂度为O(n2)。
【代码实现】
# include <stdio.h>
void swap(int *, int *);
int main(void)
{
int n, i, j;
int a[10005];
scanf("%d", &n);
for (i = 1; i <= n; ++i)
scanf("%d", &a[i]);
for (i = 1; i < n; ++i)
for (j = 1; j < n-i+1; ++j)
if (a[j] > a[j+1])
swap(&a[j], &a[j+1]);
for (i = 1; i <= n; ++i)
printf("%d\n", a[i]);
return 0;
}
void swap(int *a,int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
}
void bubble_sort(void)//冒泡排序加强版
{
int i, j, done;
done = 0;
for (i = 1; i < n && !done; ++i)//若已经排好序则不循环
{
done = 1;
for (j = 1; j < n-i+1; ++j)
if (a[j] > a[j+1])
{
swap(j);
done = 0;
}
}
}
【心得体会】