2016年7月27日18:13:11
假设用户数据为:[22,6,17,8]
数据的存贮:pHead->[22]->[6]->[17]->[8]
链式存贮结构来保存待排序的数据,首先创建一个链表,将待排序的所有元素存贮到链表中去,将待排序的链表分为两部分
:有序子集和待排序子集,初始时有序子集中没有元素,令pSort->pNext = NULL,指针pCur指向待排序的链表节点,遍历待排序的子集
如果有序子集为空,那么将pTemp = pCur;pCur = pCur->pNext;然后将pTemp所指向的结点插入到有序子集中pSort->pNext = pTemp;
pTemp->pNext = NULL;
如果有序子集不为空,那么设置一个qCur指针来遍历有序子集,从前往后遍历,初始时pCur = pSort->pNext,将pTemp所指向的结点中数据
与pCur所指向的结点进行比较,
1>如果比第一个小,就说明它比后面的一定小,它就是最小的,直接插入到第一个的前面,那么要插入到qCur所指向结点的前面,那么
就应该在设置一个指针让其指向qCur前面的那个结点,这样才能确保将元素进行插入.
2>如果比qCur所指向的元素大,就说明该元素应该放在qCur所指向元素的后面元素的某个位置,就pCur = pCur->pNext,如果发现小于
pCur就直接执行1操作,
__________________________________________________________________________________________________________________
注意:如果pTemp所指向的元素比pCur指向的元素相等,为了保证排序的稳定性,那么它应该放在后面,即执行和大于相同的操作;
__________________________________________________________________________________________________________________
3>如果pTemp所指向的元素比有序表中的最后一个元素还要大,那么直接插入有序表的尾部,
4>当待排序的元素遍历完毕的时候,该算法就执行完毕了;
#include<stdio.h>