#include<stdio.h> #include<stdlib.h> #define MAXSIZE 1000 struct LNode{ int Data[MAXSIZE]; //Data为待排序序列数组 int Last; //Last为最后一个元素的数组下标 }; typedef struct LNode *List; void InsertionSort(List L); List Create() { List L; L = (List)malloc(sizeof(struct LNode)); int j = 0,ch; /*输入待排序序列,输入 ctrl+Z 结束*/ while(scanf("%d",&ch)!=EOF) { L->Data[j] = ch; j++; } L->Last = j-1; return L; } int main() { int i; List L = Create(); InsertionSort(L); for(i=0;i<=L->Last;i++) printf("%d ",L->Data[i]); return 0; } /* 请在这里填写答案 */利用直接插入排序算法将顺序表L从小到大排序
时间: 2024-04-22 17:23:21 浏览: 224
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
以下是利用直接插入排序算法将顺序表L从小到大排序的代码:
void InsertionSort(List L) {
int i, j, temp;
for(i=1; i<=L->Last; i++) {
temp = L->Data[i];
j = i - 1;
while(j>=0 && L->Data[j]>temp) {
L->Data[j+1] = L->Data[j];
j--;
}
L->Data[j+1] = temp;
}
}
直接插入排序的基本思想是:将待排序序列分为已排序区间和未排序区间,每次从未排序区间中取出一个元素,插入到已排序区间的合适位置。具体实现时,从第二个元素开始,将其与前面已排序的元素依次比较,找到合适的位置插入。时间复杂度为O(n^2),是一种稳定的排序算法。
阅读全文