用数组排序移动的问题

img

img


只要第一题就可以了,该怎么实现做呢,题目就是上面的两张图片,内容也贴出来了

逐个右移,移动m次就可以了
(1)思路
将数组最后一个元素用临时变量t保存,整个数组后移1个位置,然后将 t 中的元素填充到数组的第一个位置,相当于数组整体右移了1位,重复上述操作m次,即可实现所需功能
(2)adjust及完整代码

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

void adjust(int p[], int n, int m)
{
    int i, j, t;
    for (i = 0; i < m; i++) //重复m次操作
    {
        t = p[n - 1]; //保存数组最后一个元素
        //数组整体右移
        for (j = n - 1; j > 0; j--)
            p[j] = p[j - 1];
        p[0] = t; //将原来数组的最后1个元素放在数组的开头
    }
}

int main()
{
    int a[1000], n,m, i;
    scanf("%d", &n); //输入n
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]); //读取n个数
    scanf("%d", &m); //读取m
    adjust(a, n, m);
    //输出
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
    return 0;
}

(3)指针操作就是把参数换成指针,数组元素访问用 * (p+i)即可

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

void adjust(int* p, int n, int m)
{
    int i, j, t;
    for (i = 0; i < m; i++) //重复m次操作
    {
        t = *(p + n - 1); //保存数组最后一个元素
        //数组整体右移
        for (j = n - 1; j > 0; j--)
            *(p + j) = *(p + j - 1);
        *p = t; //将原来数组的最后1个元素放在数组的开头
    }
}

int main()
{
    int* a=0;
    int n,m, i;
    scanf("%d", &n); //输入n
    a = (int*)malloc(sizeof(int) * n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]); //读取n个数
    scanf("%d", &m); //读取m
    adjust(a, n, m);
    //输出
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
    free(a); a = 0;
    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632