程序填空题:排序算法
Luz4年前 (2021-06-19)题库2054
本题要求完成三种常用排序算法。
输入10个需要排序的序列,用空格隔开以-1结束。输入样例为:
```
8 9 7 5 3 1 2 4 6 10 -1
```
输出样例为:
```
直接插入排序: 1 2 3 4 5 6 7 8 9 10
冒泡排序: 1 2 3 4 5 6 7 8 9 10
简单选择排序: 1 2 3 4 5 6 7 8 9 10
```
```c++
#include
#include
#define LEN 20
typedef struct{
int key; //记录关键字
} RecordType;
void InsertSort(RecordType r[], int length);//直接插入排序
void SelectSort(RecordType r[], int length);//简单选择排序
void BubbleSort(RecordType r[], int length);//冒泡排序
void Print(RecordType r[],int length);
void Copy(RecordType r[],RecordType R[],int length);
int main(void){
int length=0,temp;
RecordType r[LEN+1],R[LEN+1];
scanf("%d",&temp);
while(temp!=-1) {
r[++length].key=temp;
scanf("%d",&temp); }
Copy(r,R,length); printf("直接插入排序:"); InsertSort(R,length);
Copy(r,R,length); printf("冒泡排序:"); BubbleSort(R,length);
printf("简单选择排序:"); SelectSort(R,length);
return 0;}
//直接插入排序
void InsertSort(RecordType r[], int length){
for (int i = 2; i <= length; i++) {
if(r[i].key < r[i-1].key) {
r[0] = ;
r[i] = ;
int j=i-2;
for(;r[0].key r[j + 1].key) {
r[0] = ;
r[j + 1] = ;
r[j] =; } } }
Print(r,length);}
//简单选择排序
void SelectSort(RecordType r[], int length){
for (int i = 1; i <= length - 1; i++) {
int k = i;
for (int j = i + 1; j <= length; j++) {
if (r[j].key < r[k].key) {
k = j; } }
if (k != i) {
r[0] = ;
r[i] = ;
r[k] = ; } }
Print(r,length);}
void Print(RecordType r[],int length){
for(int i=1;i<=length;i++)
printf("%3d",r[i].key);
printf("\n");}
void Copy(RecordType r[],RecordType R[],int length){
for(int i=1;i<=length;i++)
R[i].key=r[i].key;}
```
答案:
第1空:r[i]
第2空:r[i-1]
第3空:r[0]
第4空:r[j+1]
第5空:r[j]
第6空:r[0]
第7空:r[i]
第8空:r[k]
第9空:r[0]