让一个前后有序的顺序表整体有序

#include <stdio.h>

/*
题目:天勤35页真题仿真1.
顺序表前m个元素递增有序,后n个元素也递增有序,
表中元素存储在下标为0至m+n-1的范围内
设计算法,使得整个顺序表递增有序

算法:
按照直接插入排序的算法,将后n个元素依次插入到前面的有序序列中
*/

#define maxlen 50
#define DATATYPE int

typedef struct{
    DATATYPE arr[maxlen];
    int length;
}Seqlist;

void print_SQ(Seqlist list)
{
    for(int i=0;i<list.length;i++){
        printf("%d ",list.arr[i]);
    }
    printf("\n");
}

int main(void)
{
    Seqlist list = {{1,4,5,7,10,2,6,8,8,9},10};
    int m = 5;//list前5个元素递增有序
    int n = 5;//list后5个元素递增有序

    for(int i=m;i<m+n;i++){
        //elem_to_insert保存当前要插入的元素
        int elem_to_insert = list.arr[i];
        int j = i-1;
        while(j>=0 && list.arr[j] > elem_to_insert){
            //元素后移
            list.arr[j+1] = list.arr[j];
            --j;
        }
        list.arr[j+1] = elem_to_insert;
    }

    print_SQ(list);
}

猜你喜欢

转载自blog.csdn.net/linking_lin/article/details/82558281