//算法与数据结构实验五-排序 by 022116213-CS
/*给出一组关键字序列{29,18,25,47,58,12,51,10},分别给出用希尔排序、直接选择排序和快速排序算法从小到大排序的结果。*/
#include<stdio.h>
#define MAXSIZE 20
typedef int KeyType;
typedef struct {
KeyType key;
}RedType;
typedef struct {
RedType r[MAXSIZE + 1];
int length;
}SqList;
void ShellInsert(SqList& L, int dk);//希尔插入
void ShellSort(SqList& L);//希尔排序
void SelectSort(SqList& L);//直接选择排序
int main(){
SqList L;
int i;
printf_s("input 8 elements:\n");
for (i = 1; i <= 8; i++)
scanf_s("%d", &L.r[i].key);
L.length = 8;
ShellSort(L);
printf_s("input the ordList(ShellSort):\n");
for (i = 1; i <= 8; i++)
printf_s("%5d", L.r[i].key);
printf_s("\n");
SelectSort(L);
printf_s("input the ordList(SelectSort):\n");
for (i = 1; i <= 8; i++)
printf_s("%5d", L.r[i].key);
return 0;}
void ShellInsert(SqList& L, int dk)//希尔插入{ int i, j;
for (i = dk + 1; i <= L.length; ++i)
if (L.r[i].key < L.r[i - dk].key) {
L.r[0] = L.r[i];
for (j = i - dk; j > 0 && (L.r[0].key < L.r[j].key); j -= dk)
L.r[j + dk] = L.r[j];
L.r[j + dk] = L.r[0]; }}
void ShellSort(SqList& L)//希尔排序{ int k;
int dlta[4] = { 4,3,2,1 };
for (k = 0; k < 4; ++k)
ShellInsert(L, dlta[k]);}
void SelectSort(SqList& L)//直接选择排序{ int i, j, t;
for (i = 1; i < L.length; ++i) {
for (j = i + 1; j < L.length + 1; ++j)
if (L.r[i].key > L.r[j].key) {
t = L.r[i].key;
L.r[i].key = L.r[j].key;
L.r[j].key = t; } }}
//算法与数据结构实验五-排序 by 022116213-CS
/*设计算法求两个元素值递增有序的顺序表L1和L2中的公共元素,并将其置入顺序表L3中。*/
#include<iostream>
#include<stdio.h>
#include<iomanip>
using namespace std;
#define MAXSIZE 100
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
int len;
}SqList;
void merge(SqList A, SqList B, SqList& C)//合并算法{
int i = 0, j = 0, k = 0;
while (i < A.len && j < B.len){
if (A.data[i] < B.data[j]){
i++;}
else if (A.data[i] > B.data[j]){
j++;}
else{
C.data[k] = B.data[j];
j++;i++;k++;}}
C.len = k;}
void main(){
SqList sqA, sqB, sqC;
int Adata, Bdata;
cout << "设计算法求两个元素值递增有序的顺序表L1和L2中的公共元素,并将其置入顺序表L3中。" << endl;
cout << "请输入顺序表A中的元素个数(不超过100个)";
cin >> Adata;
cout << "下面请按元素值递增顺序输入元素" << endl;
for (int i = 0; i < Adata; i++){
cout << "顺序表中A第" << i << "个元素是:";
cin >> sqA.data[i];}
sqA.len = Adata;
cout << "顺序表A的长度为:" << sqA.len << endl;
cout << "请输入顺序表B中的元素个数(不超过100个)";
cin >> Bdata;
for (int i = 0; i < Bdata; i++){
cout << "顺序表B中第" << i << "个元素是:";
cin >> sqB.data[i];}
sqB.len = Bdata;
cout << "顺序表B的长度为:" << sqB.len << endl;
merge(sqA, sqB, sqC);
cout << "顺序表C的长度为:" << sqC.len << endl;
cout << "顺序表C中的元素依次为(即为A、B的公共元素):";
for (int i = 0; i < sqC.len; i++){
cout << sqC.data[i] << setw(6);}}