直接插入排序算法
代码分析:直接插入排序算法的平均移动次数与平均比较次数同级,都是O(n²),所以,直接插入排序的平均时间复杂度为T(n)=O(n²)。算法中引入了一个附加的记录空间temp,因此辅助空间为S(n)=O(1).直接插入排序是稳定的。
#include "stdio.h" #include "malloc.h" typedef int KeyType; typedef int DataType; typedef struct { //排序码字段 KeyType key; //记录的其他字段 DataType info; }RecordNode; typedef struct { int n; RecordNode * record; }SortObject;
//按递增序进行直接插入排序 void insertSort(SortObject * pvector) { int j,i; RecordNode temp; for(i=1;i<pvector->n;i++) { temp=pvector->record[i]; j=i-1; while ((j>=0)&&(temp.key<pvector->record[j].key)) { pvector->record[j+1]=pvector->record[j]; j--; } if (j!=(i-1)) { pvector->record[j+1]=temp; } } for(i=0;i<pvector->n;i++) { printf("%d ",pvector->record[i]); } }
int main(int argv ,char * argm[]) { int i,j=0,l,k,p; SortObject * object=(SortObject *)malloc(sizeof(SortObject)); RecordNode * node=(RecordNode *)malloc(sizeof(RecordNode)); printf("请输入数组的长度 \n"); scanf("%d",&i); p=i; while (i>0) { printf("请输入数组的字段 \n"); scanf("%d",&l); node[j].key=l; j++; i--; } object->record=node; object->n=p; insertSort(object); return 1; }
结果:

浙公网安备 33010602011771号