首页 > 编程知识 正文

编写一个算法实现两个有序顺序表合并成一个顺序表,顺序表的两种实现方式

时间:2023-05-03 11:20:24 阅读:199818 作者:1502

【顺序表算法】设顺序表 A,元素的个数是 n,没有重复。如果 A 中前 k 个元
素有序,后 n-k 个元素有序,设计一个算法使得整个顺序表有序,要求算法的空
间复杂度为 O(1)。
solution:
由于题目要求空间复杂度为O(1),所以不能另外的构建线性表,只能定义中间变量来防止数据的流失。大概思路就是通过循环将后面的n-k个元素分别和前面的k个元素相比较,用程序中的while循环将前k个元素中大于中间变量temp的元素向后移,腾出一个位置,当前k个元素中出现小于中间变量的元素时,便将该中间变量插入该元素的后一位,继续循环直至全部顺序排列。
程序流程图:

源代码:

#include<stdio.h>#include<stdlib.h>const int ListSize = 100;typedef int Elemtype;typedef struct {Elemtype* data;//顺序表的基地址int length; //顺序表的长度 int listsize;}SqList;void InitList(SqList& L) {//初始化 L.data = (Elemtype*)malloc(ListSize * sizeof(Elemtype));if (L.data == NULL) {printf("存储分配失败!n");exit(1);}L.length = 0;}void creatlist(SqList& L, int n) {//创建 int i;L.listsize = ListSize;L.length = n;printf("Input %d data:n",n);for (i = 0; i < n; i++)scanf("%d", &L.data[i]);}void sortList(SqList &L,int k){ //排序 int n=L.length;int i,j;for(i=k;i<n;i++){int temp=L.data[i];j=i-1;while(j>=0&&L.data[j]>temp){L.data[j+1]=L.data[j];--j;}L.data[j+1]=temp;}}void printList(SqList& L, int n) { //输出打印 int i;for (i = 0; i < n; i++)printf("%d ", L.data[i]);printf("n");}int main() {SqList L;InitList(L);int n ;int k ;printf("Input n and k:n"); scanf("%d%d",&n,&k);creatlist(L, n);sortList(L,k);printf("排序后的线性表为:n");printList(L, n);return 0;}

注意:因为.c文件默认不支持引用功能,所以应该创建成.cpp文件,不然会报错不能运行!!!
因为了解这个写的时候心态全崩了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。