C语言求教!!大神快来呀

2025-03-04 21:34:07
推荐回答(1个)
回答1:

#include 

void InsertionSort(int* arr, int n) // 插入排序
{
    int *last = 0, *next = 0, key = 0, i = 0;

    for (i = 1; i < n; ++i)
    {
        next = arr + i, key = *next;

        if (key < *arr) // 将待插的数据比第一个数据小,直接插到最前面。
        {
            for (last = next; next != arr; next = last)
                *next = *--last;

            *arr = key;
        }
        else    // 否则从后往前遍历,找到第一个小于关键字的位置插入。
        {
            for (last = next; key < *--last; next = last)
                *next = *last;

            *next = key;
        }
    }
}

void OutPutArray(const int* arr, int n) // 打印一个数组
{
    for (int i = 0; i < n; ++i)
    {
        printf("%d ", arr[i]);
    }

    printf("\n");
}

void InsertNumber(int* arr, int n)
{
    int key = 0, i = 0;

    InsertionSort(arr, n - 1);  // 对之前的n-1个数排序
    // OutPutArray(arr, n - 1); // 这里可以打印出来看一下对之前的数据排序是否正确

    scanf("%d", &key);  // 输入一个数

    if (key < arr[0])   // 参照之前的插入排序原理,将这个数插入到数组。
    {
        for (i = n-1; 0 < i; --i)
        {
            arr[i] = arr[i - 1];
        }

        arr[0] = key;
    }
    else
    {
        for (i = n-2; key < arr[i]; --i)
        {
            arr[i + 1] = arr[i];
        }

        arr[++i] = key;
    }
}

int main()
{
    int arr[10] = { 0 };

    scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d"      // 输入9个数
        , arr + 0, arr + 1, arr + 2, arr + 3, arr + 4, arr + 5, arr + 6, arr + 7, arr + 8);

    InsertNumber(arr, 10);  // 调用函数,将输入的第10个数插进去。

    OutPutArray(arr, 10);   // 输出

    return (0);
}