#2
azzbcc2016-04-21 11:24
|
程序代码:
# include <stdio.h>
# define MAXSIZE 20
typedef int KeyType;
typedef char InfoType;
typedef struct
{
KeyType key; //关键字
InfoType otherinfo;
}RcdType;
typedef struct
{
RcdType r[MAXSIZE + 1];
int length;
}Sqlist;
Sqlist input(Sqlist L)//输入元素
{
printf("请输入所需数字元素的个数:");
scanf("%d", &L.length);
printf("请输入元素:");
for (int i = 1; i <= L.length; i++)//L.r[0] 暂存 L.r[i+1] 数据
scanf("%d", &L.r[i].key);
return L;
}
void print(Sqlist L)//输出元素
{
for (int i = 1; i <= L.length; i++)
printf("%-5d" , L.r[i].key);
printf("\n") ;
}
void InsertSort(Sqlist L)//改变后的直接插入法
{
int i, j;
for (i = 1; i <= L.length; i++)
if (L.r[i+1].key < L.r[i].key)
{
L.r[0] = L.r[i+1];//L.r[0]暂存数据
for (j = i; L.r[0].key < L.r[j].key; --j)
L.r[j+1] = L.r[j];//后移数据
L.r[j+1] = L.r[0]; //插入数据
}
printf("直接插入法 排序后的表的元素为:");
print(L);
}
int main()
{
Sqlist L;
L = input(L);
printf("原表的元素为:");
print(L);
InsertSort(L);
return 0;
}
# define MAXSIZE 20
typedef int KeyType;
typedef char InfoType;
typedef struct
{
KeyType key; //关键字
InfoType otherinfo;
}RcdType;
typedef struct
{
RcdType r[MAXSIZE + 1];
int length;
}Sqlist;
Sqlist input(Sqlist L)//输入元素
{
printf("请输入所需数字元素的个数:");
scanf("%d", &L.length);
printf("请输入元素:");
for (int i = 1; i <= L.length; i++)//L.r[0] 暂存 L.r[i+1] 数据
scanf("%d", &L.r[i].key);
return L;
}
void print(Sqlist L)//输出元素
{
for (int i = 1; i <= L.length; i++)
printf("%-5d" , L.r[i].key);
printf("\n") ;
}
void InsertSort(Sqlist L)//改变后的直接插入法
{
int i, j;
for (i = 1; i <= L.length; i++)
if (L.r[i+1].key < L.r[i].key)
{
L.r[0] = L.r[i+1];//L.r[0]暂存数据
for (j = i; L.r[0].key < L.r[j].key; --j)
L.r[j+1] = L.r[j];//后移数据
L.r[j+1] = L.r[0]; //插入数据
}
printf("直接插入法 排序后的表的元素为:");
print(L);
}
int main()
{
Sqlist L;
L = input(L);
printf("原表的元素为:");
print(L);
InsertSort(L);
return 0;
}
void InsertSort(Sqlist L)//直接插入法
{
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];//L.r[0]暂存数据
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]; //插入数据
}
printf("直接插入法 排序后的表的元素为:");
print(L);
}
改变后的直接插入法 是根据红色的代码改变的
当输入L.length为6时; 排序没有问题
********************************************************************
原表的元素为:1 6 2 5 3 4
直接插入法 排序后的表的元素为:1 2 3 4 5 6
********************************************************************
当输入L.length为7时; 排序就有问题
********************************************************************
原表的元素为:1 7 2 6 3 5 4
直接插入法 排序后的表的元素为:0 1 2 3 4 5 6
********************************************************************
请问为啥会出现这种情况,代码怎样改才对?
[此贴子已经被作者于2016-4-20 16:29编辑过]