直接插入排序的基本思想是:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成。
时间复杂度为:O(n²)
稳定性:稳定
适用性:适用于顺序存储和链式存储的线性表。
下面投放直接插入排序的代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MaxSize 50
typedef struct{
int data[MaxSize];
int length;
}SeqList;
//创建顺序表
void createTable(SeqList &L){
L.length=5; //用循环方法初始化时,千万要记得给length赋初值
L.data[0] = 3;
L.data[1] = 1;
L.data[2] = 4;
L.data[3] = 2;
L.data[4] = 5;
}
//直接插入排序
void insertSort(SeqList &L,int n){
int i,j,temp;
for(i=1;i<n;i++){
if(L.data[i]<L.data[i-1]){
temp = L.data[i];
for(j = i-1;temp<L.data[j];j--){
L.data[j+1] = L.data[j];
}
L.data[j+1] = temp;
}
}
}
//输出顺序表
void printTable(SeqList L){
int i;
for(i = 0;i<L.length;i++){
printf("%d\t",L.data[i]);
}
printf("\n");
}
int main(){
SeqList L; //创建表
createTable(L);
printf("排序前的列表为:\n");
printTable(L); //打印表
insertSort(L,5); //直接插入算法
printf("排序后的列表为:\n");
printTable(L); //打印排序后的
return 0;
}
运行结果