以下程序利用直接插入排序和冒泡排序算法实现输入数据的排序,请补充完整代码。
(填写答案时请注意:1)字符间不要有空格;2)答案中出现的变量名称严格区分大小写;3)答案中出现的点运算符“.“以及其他运算符号均为英文标点符号,请将输入法切换在英文半角状态下输入。)
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 50
typedef int KeyType;
typedef struct
{
KeyType key;
}RedType;
typedef struct{
RedType r[MAXSIZE+1];
int length;
}SqList;
void CreateList(SqList &L)
{
int data, k;
printf("\n\n输入初始数据(每个数据以空格隔开,-1 结束):\n\n");
k = 0;
scanf("%d",&data);
while(data!= -1)
{
k++; L.r[k].key=data; scanf("%d",&data);
}
L.length=k;
}
void PrintList(SqList L, int n)
{
int i;
printf("\n\n 排序前的数据 : ");
for(i = 0; i < n; i++)
printf(" %d",L.r[i+1].key);
printf("\n\n");
}
void PrintList1(SqList L, int n)
{
int i;
printf("\n\n 排序后的数据 : ");
for(i = 0; i < n; i++)
printf(" %d",L.r[i+1].key);
printf("\n\n");
}
void InsertSort(SqList &L, int n)
{
int i,j;
for(i = 2; i <= L.length; i++)
{
if(L.r[i].key< L.r[i-1].key)
{
L.r[0] = L.r[i];
for(j=i-1;L.r[0].key<L.r[j].key;--j)
{
L.r[j+1]=L.r[j];
}
L.r[j+1]= L.r[0];
}
}
}
void BubleSort(SqList &L, int n)
{
int i, j;
RedType temp;
for(i = 1; i < n; i++)
for(j = n-1; j >= i; j--)
if(L.r[j + 1].key < L.r[j].key)
{
temp = L.r[j + 1];
L.r[j + 1] =L.r[j];
L.r[j] =temp;
}
}
int main(){
SqList L;
int flag=0;
while (1)
{
printf("\n\n各种排序算法及操作选项如下:\n\n");
printf(" 1 -- 直接插入排序\n");
printf(" 2 -- 冒泡排序\n");
printf("\n\n 请在上述序号中选择一个并输入 : ");
scanf("%d",&flag);
printf("\n\n");
switch(flag)
{
case 1:
CreateList(L);
PrintList(L,L.length);
printf(" 1 -- 直接插入排序\n");
InsertSort(L, L.length);
PrintList1(L,L.length);
break;
case 2:
CreateList(L);
PrintList(L,L.length);
printf(" 2 -- 冒泡排序\n");
BubleSort(L, L.length);
PrintList1(L,L.length);
break;
case 3:
exit(0);
break;
default:printf("没有您想要的功能");
}
system("pause");
}
return 0;
}
以下程序利用快速排序和选择排序算法实现输入数据的排序,请补充完整代码。(填写答案时请注意:1)字符间不要有空格;2)答案中出现的变量名称严格区分大小写 ;3)答案中出现的点运算符“.”为英文标点符号(英文半角);4)如出现运算表达式:如a加2运算,运算符第一个表达式写变量名称,第二个表达式写数值,结果为”a+2“。)
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 50
typedef int KeyType;
typedef struct
{
KeyType key;
}RedType;
typedef struct{
RedType r[MAXSIZE+1];
int length;
}SqList;
void CreateList(SqList &L)
{
int data, k;
printf("\n\n输入初始数据(每个数据以空格隔开,-1 结束):\n\n");
k=0;
scanf("%d",&data);
while(data!= -1)
{
k++;
L.r[k].key=data;
scanf("%d",&data);
}
L.length=k;
}
void PrintList(SqList L, int n)
{
int i;
printf("\n\n 排序前的数据 : ");
for(i = 0; i < n; i++)
printf(" %d",L.r[i+1].key);
printf("\n\n");
}
void PrintList1(SqList L, int n)
{
int i;
printf("\n\n 排序后的数据 : ");
for(i = 0; i < n; i++)
printf(" %d",L.r[i+1].key);
printf("\n\n");
}
int Partition(SqList &L, int low, int high)
{
int i, j;
KeyType pivotkey;
L.r[0]= L.r[low];
pivotkey=L.r[low].key;
while(low<high){
while((L.r[high].key>=pivotkey)&&(low<high)) high--;
L.r[low]= L.r[high];
while((L.r[low].key<=pivotkey)&&low<high) low++;
L.r[high]=L.r[low];
}
L.r[low]=L.r[0];
return low;
}
void QuickSort(SqList &L, int low, int high)
{
int pivotLoc;
if(low< high)
{
pivotLoc= Partition(L, low, high);
QuickSort(L, low,pivotLoc-1 );
QuickSort(L,pivotLoc+1,high);
}
}
void SeleSort(SqList &L, int n)
{
int i,j,k;
RedType temp;
for(i = 1; i < n; i++)
{
k = i;
for(j = i + 1; j <= n; j++)
if(L.r[j].key <L.r[k].key)
k=j;
if(k != i)
{
temp = L.r[i];
L.r[i] = L.r[k];
L.r[k] = temp;
}
}
}
int main(){
SqList L;
CreateList(L);
PrintList(L,L.length);
printf("快速排序\n");
QuickSort(L, 1,L.length);
PrintList1(L,L.length);
printf("直接选择排序\n");
SeleSort(L, L.length);
PrintList1(L,L.length);
return 0;
}