五个数由大到小排列,插入一个数,顺序保持有序

题目:如果一个数组中保存的元素是有序的(由大到小),向这个数组中插入一个数,使得插入后的数组元素依然保持有序

int N = 5;

int number;

    int tempN;

    int ary[N+1]={10,8,6,4,3};//由大到小顺序

    printf("请输入要插入的数字:\n");

    scanf("%d",&number);

    for (int i=0; i<N+1; i++)

    {

        if (number<ary[i])

        {

            continue; // continue意思是跳出循环,继续执行加1判断number操作,else不再执行,一直找到第一个比它小的数字就执行else语句。

        }

        else

        { // 交换两个变量的值

            tempN =  ary[i];

            ary[i]=number;

            number = tempN;

        }

    }

    printf("重新排列后的数组为:\n");

    for (int i=0; i<N+1; i++)

    {

        printf("%d  ",ary[i]);

    }

    printf("\n");

顺序表(数组或链表)中保持元素有序意味着每次插入操作后,列表中的元素仍然满足某种排规则,如升或降。这里我们将讨论如何在一个已排顺序表中插入元素保持有序。 对于简单情况下的顺序表,如果使用的是数组并且数据结构支持直接访问(例如整型数组),插入操作可能涉及到以下步骤: **数组插入有序元素(假设为升排列):** 1. **查找位置**:遍历数组,找到第一个于等于新值的元素的位置 `i`。 2. **移动元素**:将位置 `i` 到末尾的所有元素依次后移一位,腾出空间。 3. **插入元素**:将新值放入之前找到的位置 `i`。 **代码示例(插入数组末尾):** ```c void insert_sorted(int arr[], int n, int value) { if (n == 0 || arr[n - 1] < value) { // 如果数组为空或新值比最后一个插入末尾 arr[n] = value; } else { // 找到插入位置并移动其他元素 for (int i = n; i > 0 && arr[i - 1] > value; i--) { arr[i] = arr[i - 1]; // 逐个后移元素 } arr[i] = value; // 插入新值 } } ``` 对于链表,插入操作通常更复杂些,因为没有预先定义的位置,需要遍历链表直到找到合适的位置。链表插入时可能会用到指针和临时节点。 **链表插入有序元素(假设为升链表):** 1. **遍历链表**,找到第一个于等于新值的节点 `current` 和它的前一个节点 `prev`。 2. **创建新节点**:创建一个新节点 `new_node`,设置其值为新值。 3. **插入新节点**:如果 `current` 是头结点,则将新节点设为头结点;否则,将 `new_node` 的`next`指向 `current`,然后更新 `prev` 和 `current` 的链接。 **注意事项**: - 避免不必要的复制或移动操作,特别是对于数组或链表,这可能会影响性能。 - 如果有重复元素插入时需要决定是否保留有的重复项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值