直接插入排序。 #include <iostream> #define MAXSIZE 1000 using namespace std; typedef struct { int key; char *otherinfo; }ElemType; typedef struct { ElemType *r; int length; }SqList; 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[i]=L.r[i-1]; for( 2 分 ; 2 分 ;--j) 2 分 ; L.r[j+1]=L.r[0]; } } void Create_Sq(SqList &L) { int i,n; cin>>n; //输入的值不大于 MAXSIZE for(i=1;i<=n;i++) { cin>>L.r[i].key; L.length++; } } void show(SqList L) { int i; for(i=1;i<=L.length;i++) if(i==1) cout<<L.r[i].key; else cout<<" "<<L.r[i].key; } int main() { SqList L; L.r=new ElemType[MAXSIZE+1]; L.length=0; Create_Sq(L); InsertSort(L); show(L); return 0; } 输入样例: 第一行输入一个数n(输入的值不大于 MAXSIZE),接下来输入n个数。 7 24 53 45 45 12 24 90 输出样例: 输出排序结果。 12 24 24 45 45 53 90
时间: 2024-03-24 11:41:16 浏览: 81
直接插入排序
好的,您的第四个问题是关于直接插入排序的,并给出了一个C++的实现。直接插入排序是一种简单的排序算法,它的基本思想是将未排序部分的元素插入到已排序部分的合适位置。这里是一个C++的实现:
```
#include <iostream>
#define MAXSIZE 1000
using namespace std;
typedef struct {
int key;
char *otherinfo;
} ElemType;
typedef struct {
ElemType *r;
int length;
} SqList;
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[i]=L.r[i-1];
for(j=i-2;L.r[0].key<L.r[j].key;--j) {
L.r[j+1]=L.r[j];
}
L.r[j+1]=L.r[0];
}
}
}
void Create_Sq(SqList &L) {
int i,n;
cin>>n; //输入的值不大于 MAXSIZE
for(i=1;i<=n;i++) {
cin>>L.r[i].key;
L.length++;
}
}
void show(SqList L) {
int i;
for(i=1;i<=L.length;i++) {
if(i==1)
cout<<L.r[i].key;
else
cout<<" "<<L.r[i].key;
}
}
int main() {
SqList L;
L.r=new ElemType[MAXSIZE+1];
L.length=0;
Create_Sq(L);
InsertSort(L);
show(L);
return 0;
}
```
其中,`SqList`是一个结构体类型,包含了一个元素数组`r`和数组长度`length`。`ElemType`是我们要排序的元素类型,包含了一个整数`key`和其他信息`otherinfo`(这里我们不关心其他信息)。`InsertSort`函数是我们的排序函数,它的实现与前面的实现有些许不同,但思路是一样的。`Create_Sq`函数用于创建一个`SqList`类型的对象,并从标准输入中读取元素。`show`函数用于输出排序后的元素。
阅读全文