1.冒泡排序
题解:
- 冒泡排序注意外层循环只要循环n-1次,因为剩下的一个肯定是按照顺序的;并且其内层循环也要注意少循环一次,因为每次是当前值和下一个值进行比较,如果以最后一个为当前值数组就会越界。
题目:
问题 B: 冒泡排序(数组)
时间限制: 1 Sec 内存限制: 128 MB
提交: 1245 解决: 684
[提交][状态][讨论版]
题目描述
输入n个数字,使用冒泡排序对其进行升序排序。
输入
测试次数T
每组测试数据格式为:数字个数n,后跟n个数字。假设n<20。
输出
对每组测试数据,输出冒泡排序的每趟排序结果
样例输入
2
5 10 4 43 1 2
10 20 123 12 2 434 54 2 45 23 -10
样例输出
4 10 1 2 43
4 1 2 10 43
1 2 4 10 43
1 2 4 10 43
20 12 2 123 54 2 45 23 -10 434
12 2 20 54 2 45 23 -10 123 434
2 12 20 2 45 23 -10 54 123 434
2 12 2 20 23 -10 45 54 123 434
2 2 12 20 -10 23 45 54 123 434
2 2 12 -10 20 23 45 54 123 434
2 2 -10 12 20 23 45 54 123 434
2 -10 2 12 20 23 45 54 123 434
-10 2 2 12 20 23 45 54 123 434
代码块:
#include <stdio.h>
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
int i, j, n, temp;
scanf("%d", &n);
int a[n];
for(i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
for(i=0; i<n-1; i++)
{
for(j=0; j<n-i-1; j++)
{
if(a[j]>a[j+1])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
for(j=0; j<n; j++)
{
if(j!=n-1)
printf("%d ", a[j]);
else
printf("%d\n", a[j]);
}
}
}
return 0;
}
2.选择排序
题目:
问题 C: 选择排序(数组)
时间限制: 1 Sec 内存限制: 128 MB
提交: 1081 解决: 665
[提交][状态][讨论版]
题目描述
输入n个数字,使用选择排序对齐进行升序排序。
输入
测试次数T
每组测试数据格式为:数字个数n,后跟n个数字,假设n<20
输出
对每组测试数据,输出选择排序的每趟排序结果
样例输入
2
5 10 4 43 1 2
10 20 123 12 2 434 54 2 45 23 -10
样例输出
1 4 43 10 2
1 2 43 10 4
1 2 4 10 43
1 2 4 10 43
-10 123 12 2 434 54 2 45 23 20
-10 2 12 123 434 54 2 45 23 20
-10 2 2 123 434 54 12 45 23 20
-10 2 2 12 434 54 123 45 23 20
-10 2 2 12 20 54 123 45 23 434
-10 2 2 12 20 23 123 45 54 434
-10 2 2 12 20 23 45 123 54 434
-10 2 2 12 20 23 45 54 123 434
-10 2 2 12 20 23 45 54 123 434
代码块:
#include <stdio.h>
int main(void)
{
int t;
scanf("%d", &t);
while(t--)
{
int i, j, n;
int temp1 = 0;
int temp2 = 99999;
scanf("%d", &n);
int a[n];
for(i=0; i<n; i++)
scanf("%d", &a[i]);
for(i=0; i<n-1; i++)
{
for(j=i; j<n; j++)
{
if(temp2>a[j])
{
temp2 = a[j];
temp1 = j;
}
}
temp2 = a[temp1];
a[temp1] = a[i];
a[i] = temp2;
temp2 = 99999;
for(j=0; j<n; j++)
{
if(j!=n-1)
printf("%d ", a[j]);
else
printf("%d\n", a[j]);
}
}
}
return 0;
}