题目:数组排序

1.冒泡排序

题解:

  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;
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页