#include<stdio.h> #include<stdlib.h> #define n 100 //待排序记录的个数 typedef int KeyType; //关键字类型定义 typedef char OtherdataType;//非关键字字段类型定义 typedef struct { KeyType key; //关键字域 OtherdataType data[10]; //其它数据域 } RecType; typedef RecType SeqList[n+1]; //顺序表类型 void lnsertSort(SeqList R) { //对顺序表R中的记录R[1...n]按递增序进行插入排序??? int i,j; for(i=2;i<=5;i++) //依次插入R[2],…,R[n]????? if(R[i].key<R[i-1].key) { if(R[i].key<R[i-1].key) { R[0]=R[i]; j=i-1; //R[0]是哨兵,且是R[i]的副本 do { R[j+1]=R[j]; //将关键字大于R[i].key的记录后移???????? j-- ; }while(R[0].key<R[j].key);//当R[i].key≥R[j].key时终止??????? R[j+1]=R[0]; //R[i]插入到正确的位置上 } /* printf("\n"); for(i=1;i<=10;i++) { printf("%4d",R[i].key); } */ } } main() { SeqList R; int i,j; // a[10]={10,1,2,3,4,5,6,7,8,9}; for(i=1;i<=5;i++) { scanf("%d %s",&R[i].key,R[i].data); //R[i].key=a[i-1]; } lnsertSort(R); printf("\n"); for(i=1;i<=5;i++) { printf("%4d %s\n",R[i].key,R[i].data); } }
时间: 2024-04-28 08:20:06 浏览: 84
#include<stdio.h>
这段代码存在一些问题,比如:
1. 函数 `lnsertSort` 的名称中多了一个字符 `l`,应该是 `insertSort`。
2. 函数 `lnsertSort` 的实现中,对于循环的起始值,应该是 `i = 2`,而不是 `i = 1`。
3. 函数 `lnsertSort` 中,if 判断语句的两个条件是相同的,应该只保留一个。
4. 函数 `lnsertSort` 中,do-while 循环的条件应该是 `R[0].key < R[j].key`,而不是 `R[0].key < R[i].key`。
5. 函数 `lnsertSort` 中,if 判断语句中的两个大括号之间多了一行多余的代码。
除了这些问题,代码的整体逻辑是正确的,可以实现对顺序表中元素的插入排序。如果需要使用该代码,请将这些问题进行修正。
阅读全文