1. 程式人生 > >讓一個前後有序的順序表整體有序

讓一個前後有序的順序表整體有序

#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);
}