//对于很小的数源(N<=20),插入排序比快速排序好,此时,插入排序速度快也稳定。
//插入排序只用在小的或是非常接近排好序的输入数据上。
1
struct Node 2 { 3 int Element; 4 Position Next; 5 }; 6 7 8 //插入排序算法实现链表中由大到小排序 9 void InsertSort(const List L) 10 { 11 //插入排序算法 12 Position head = L; 13 Position first; /*为原链表剩下用于直接插入排序的节点头指针*/ 14 Position t; /*临时指针变量:插入节点*/ 15 Position p = head; /*临时指针变量,初始化*/ 16 Position q; /*临时指针变量*/ 17 if (head->Next == NULL) 18 printf("Empty List!");//判断是不是空链表 19 else 20 { 21 first = head->Next->Next; /*原链表剩下用于直接插入排序的节点链表:可根据图12来理解。*/ 22 head->Next->Next = NULL; /*只含有一个节点的链表的有序链表*/ 23 while (first != NULL) /*遍历剩下无序的链表*/ 24 { 25 /*注意:这里for语句就是体现直接插入排序思想的地方*/ 26 27 for (t = first, q = head->Next; ((q != NULL) && (q->Element > t->Element)); p = q, q = q->Next); /*无序节点在有序链表中找插入的位置*/ 28 /*退出for循环,就是找到了插入的位置*/ 29 first = first->Next; /*无序链表中的节点离开,以便它插入到有序链表中。*/ 30 if (q == head->Next) 31 head->Next = t; 32 else p->Next = t; 33 t->Next = q; /*完成插入动作*/ 34 } 35 } 36 }

 

posted on 2016-12-23 16:45  新爱代  阅读(404)  评论(0编辑  收藏  举报