首页 > 解决方案 > 如何将最大的数字推到数组的后面

问题描述

在第一次通过后如何做到这一点,最大的数字保证在数组的最高编号的元素中;在第二遍之后,两个最高的数字“就位”,依此类推。

当前代码仅使其从最大传递到最小,但我不希望那样。

我只是想按原始顺序对数据项执行此操作。

#include <stdio.h>
#include <stdlib.h>

#define SIZE 10

int main(void)
{
    int a[SIZE] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
    int noc = 0;

    puts("Data items in original order");

    for (int noc = 0; noc < 9; noc++) {
        printf("\n");

        for (size_t i = 0; i + noc < SIZE; i++) {
            printf("%4d", a[i]);
        }
        for (int pass = 1; pass < SIZE; pass++) {
            for (size_t i = 0; i < SIZE - pass; i++) {
                if (a[i] > a[i - 1]) {
                    int hold = a[i];
                    a[i] = a[i - 1];
                    a[i - 1] = hold;
                }
            }
        }
    }

    for (int pass = 1; pass < SIZE; pass++) {
        for (size_t i = 0; i < SIZE - pass; i++) {
            if (a[i] > a[i + 1]) {
                int hold = a[i];
                a[i] = a[i + 1];
                a[i + 1] = hold;
            }
        }
    }

    puts("\nData items in ascending order");

    for (size_t i = 0; i + noc < SIZE; i++) {
        printf("%4d", a[i]);
    }
    puts("");
}

标签: c

解决方案


#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main(void)
{
int a[SIZE] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
int i;
int pass = 0;
while(pass < SIZE - 1){
int index = SIZE - pass - 1;
int MAX = a[index];
for(i=0;i<SIZE - pass;i++){
if(a[i]>MAX) {
    MAX = a[i];
    index = i;
}
}
a[index] = a[SIZE - pass - 1];
a[SIZE - pass - 1] = MAX;
for(i=0 ;i < SIZE ; i++ ) printf("%d ",a[i]);
printf("\n");
pass++;
}
}

推荐阅读