元素互换移位算法

来源:互联网 发布:java if else 都执行 编辑:程序博客网 时间:2024/05/21 20:31

顺序表应用3:元素位置互换之移位算法

Time Limit: 1000MS Memory Limit: 570KB
Submit Statistic Discuss

Problem Description

一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),借助元素移位的方式,设计一个空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段。
注意:先将顺序表元素调整为符合要求的内容后,再做输出,输出过程只能用一个循环语句实现,不能分成两个部分。

Input

 第一行输入整数n,代表下面有n行输入;
之后输入n行,每行先输入整数len与整数m(分别代表本表的元素总数与前半表的元素个数),之后输入len个整数,代表对应顺序表的每个元素。

Output

 输出有n行,为每个顺序表前m个元素与后(len-m)个元素交换后的结果

Example Input

210 3 1 2 3 4 5 6 7 8 9 105 3 10 30 20 50 80

Example Output

4 5 6 7 8 9 10 1 2 350 80 10 30 20

代码:

要移动前m个元素,则从第m+1(下标为m)个元素开始,依次移到下标为0的地方,然后把前面的m个元素依次后移。要有两个标记标量,一起后移,一个控制前m个的首位元素,一个标记后面要往前移动的元素。
01#include <stdio.h>
02#include <stdlib.h>
03#define maxsize 1000005
04typedef int element;
05typedef struct  //
06{
07    element *elem;
08    int length;
09    int listsize;
10}Sqlist;
11int Initlist(Sqlist *S)
12{
13    S->elem = (element *)malloc(maxsize*(sizeof(element)));
14    if(!S->elem) return 0;
15    S->length = 0;
16    S->listsize = maxsize;
17    return 1;
18}
19int Create(Sqlist *S,int n)
20{
21    int i=0;
22    while(n--)
23    {
24        scanf("%d",&S->elem[i]);
25        i++;
26    }
27    S->length = i;
28    return 1;
29}
30int Change(Sqlist *S,int n)   //重要步骤!!
31{
32    int i = n,j,k,t,m;
33    for( i = n,j = 0;i<=S->length-1;i++,j++)
34    {
35        t = S->elem[i];
36        for(k = j;k<=i;k++)
37        {
38            m = S->elem[k];
39            S->elem[k] = t;
40            t = m;
41        }
42 
43    }return 1;
44}
45int Display(Sqlist *S)   //输出元素
46{
47    int i;
48    for(i = 0;i<=S->length-2;i++)
49    {
50        printf("%d ",S->elem[i]);
51    }
52    printf("%d\n",S->elem[S->length-1]);
53    return 1;
54}
55int main()
56{
57    int N;
58    scanf("%d",&N);
59    while(N--)
60    {
61        Sqlist S;
62        Initlist(&S);
63        int n,m;
64        scanf("%d%d",&m,&n);
65        Create(&S,m);
66        Change(&S,n);
67        Display(&S);
68    }
69    return 0;
70}

原创粉丝点击