6-2 编写函数实现直接插入排序 分数 30 作者 YJ 单位 西南石油大学 编写函数实现直接插入排序。输入若干正整数,以0结束,采用直接插入排序将这些整数按照从大到小的顺序排序。 函数接口定义: void InsertSort(SqList &L); 其中 L 是待排序的关键字,采用顺序表存储。 裁判测试程序样例: #include <iostream> using namespace std; #define MAXSIZE 20 //顺序表的最大长度 typedef int ElemType; //顺序表的存储结构 typedef struct { ElemType *r;//存储空间的基地址 int length; //顺序表长度 }SqList;//顺序表类型 void InsertSort(SqList &L); void Create_Sq(SqList &L) { int i,n; cin>>n; i=1; while(n>0) { L.r[i]=n; cin>>n; i++; } L.length=i-1; } void show(SqList L) { int i; for(i=1;i<=L.length;i++) cout<<L.r[i]<<" "; } int main() { SqList L; L.r=new ElemType[MAXSIZE+1]; L.length=0; Create_Sq(L); InsertSort(L); show(L); return 0; } /* 请在这里填写答案 */ 输入样例: 5 9 1 3 0 输出样例: 在这里给出相应的输出。例如: 9 5 3 1
时间: 2024-03-22 19:41:48 浏览: 61
以下是直接插入排序的 C++ 实现:
```cpp
void InsertSort(SqList &L) {
int i, j;
for (i = 2; i <= L.length; i++) { // 从第二个元素开始,即第一个无序元素
if (L.r[i] > L.r[i-1]) continue; // 如果该元素比它前一个元素大,说明已有序,无需排序
L.r[0] = L.r[i];
for (j = i-1; L.r[j] < L.r[0]; j--) // 从后向前查找插入位置
L.r[j+1] = L.r[j]; // 向后移动元素
L.r[j+1] = L.r[0]; // 插入元素
}
}
```
这个函数实现了对顺序表 `L` 的直接插入排序。其中,`L.r` 是存储关键字的数组,`L.length` 是顺序表中元素的个数。
函数的主要思路是:从第二个元素开始循环,如果该元素比它前一个元素大,说明已有序,无需排序。否则,将该元素插入到前面有序序列的适当位置,同时将后面的元素依次向后移动一位。循环结束后,`L` 中的元素就按照从大到小的顺序排好了。
完整代码:
阅读全文