12.2 实验一 线性表的顺序存储结构
2. (必做题)设计并验证以下算法:设顺序表A和B中的数据元素为整数且单调递增有序,将这两张表合并成顺序表C。
(1) 顺序表C单调递减有序。
(2) 根据键盘输入数据建立顺序表A和B。
(3) 输出顺序表A、B和C。
代码:
#include<stdio.h>
int a[10000],b[10000],c[20000];
void quickSort(int num[], int l, int r) {
if (l >= r)
return;
int i = l, j = r, x = num[l];
while (i < j) {
while (i < j && num[j] >= x)
j--;
if (i < j)
num[i++] = num[j];
while (i < j && num[i] <= x)
i++;
if (i < j)
num[j--] = num[i];
}
num[i] = x;
quickSort(num, l, i - 1);
quickSort(num, i + 1, r);
}
int main()
{
int n,m;
printf("请输入表a的个数:");
scanf("%d",&n);
if(n<1){
printf("个数不能小于1!");
return 0;
}
printf("请输入表a的元素:");
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
printf("请输入表b的个数:");
scanf("%d",&m);
if(m<1){
printf("个数不能小于1!");
return 0;
}
printf("请输入表b的元素:");
for(int i=0;i<m;i++)
scanf("%d",&b[i]);
quickSort(a,0,n-1);
quickSort(b,0,m-1);
printf("顺序表a为:");
for(int i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
printf("顺序表b为:");
for(int i=0;i<m;i++)
printf("%d ",b[i]);
printf("\n");
int l = m+n ;
for(int i=0;i<n;i++)
{
c[i] = a[i];
}
for(int i=n,j=0;i<l;i++)
{
c[i] = b[j++];
}
quickSort(c,0,l-1);
int d[l];
for(int i=0,j=l-1;i<l;i++)
{
d[i] = c[j--];
}
printf("顺序表c为:");
for(int i=0;i<l;i++)
printf("%d ",d[i]);
printf("\n");
}
明明三分钟写完,结果老师不让用C++不让用sort函数。。。。。。
呕。。。我吐了,不过捡起了快排的写法可还行,不亏(握拳)。