C语言编程100题-6.1

6.1
有一个包含奇数个项的整数序列,请编程按照以下规则排序:最大值排在中间,最小值排在最左,中值排在最右,其它值清为0。输入2行,第一行n表示要输入的数的个数,n是奇数。第二行输入的n个数。输出,排序后的数组,数据空格分隔,最后一个数据后面没有空格。
样例:
5
12 20 9 88 32
9 0 88 0 20
样例输入:
7
23 44 10 9 22 13 34
样例输出:
9 0 0 44 0 0 22

#include<stdio.h>
void bubble(int *array, int n)//定义冒泡排序函数,含指针
{
    int max, min, mid;
    int i, b, h, a;
    for (i = 0; i < n - 1; i++)//使下面的梳理顺序再次执行(最多只需执行n-1次,例如43210,经过5-1=4次梳理,可得43210)
    {
        for (b = 0; b < n - i - 1; b++)//单次梳理顺序,顺序排列(例如43210,经过1次梳理,可得32104)
        {
            if (array[b] > array[b + 1])//数值交换
            {
                h = array[b + 1]; array[b + 1] = array[b]; array[b] = h;
            }
        }
    }
    min = array[0]; max = array[n - 1]; mid = array[(n - 1) / 2];
    for (a = 0; a < n; a++)//循环赋值为0
    {
        if (a != 0 && a != n - 1 && a != (n - 1) / 2)
            array[a] = 0;
    }
    array[0] = min; array[(n - 1) / 2] = max; array[n - 1] = mid;
}
int main()
{
    int n, b, c, array[100];
    scanf("%d", &n);
    scanf("%d", &array[0]);
    for (b = 1; b < n; b++)
        scanf(" %d", &array[b]);
    bubble(array, n);//数组内重置
    printf("%d", array[0]);
    for (c = 1; c < n; c++)
        printf(" %d", array[c]);
    system ("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/nollysoul/article/details/89819929