【声明】版权所有。 欢迎转载。 请勿用于商业用途。 联系方式: feixiaoxing @163.com】
与线性列表排序相比,链表排序的内容有点麻烦。 另一方面,请考虑数据插入的步骤; 另一方面,你也要为方针担心。 如果一步内容有误,操作系统会立即向您弹出exception。 关于链表的特殊性,适合链表的排序是什么?
(1)插入排序(匹配) ) ) ) ) )。
)冒泡排序(匹配) ) ) ) ) )。
)3)希尔排序(符合) ) ) ) )。
(4)排序选择(匹配) ) ) )。
(5)快速排序(不合适) ) ) ) ) ) )。
(6)合并排序(不合适) ) ) ) ) ) ) ) ) ) ) ) )。
(7)基数排序(不合适) ) ) )。
(8)堆栈排序(不合适) ) ) ) )。
其实,一般来说。 如果涉及调整数据之间的相对关系,则仅适用于线性排序。 如果只是交换数据的内容,这种排序方法也很适合链表的排序。 快速排序、合并排序和堆排序与中间值选择问题有关,因此不太适合链表排序。
为了说明链表的排序是如何进行的,以插入排序为例,说明链表是如何插入排序的。
a)首先遍历节点,一边是排序好的节点,一边是待排序的节点
void sort _ for _ link _ node (node * * PP node ) {NODE* prev; 节点* Curr; if(null==PPnode||null==*PPnode )返回; curr=(PPnode )-next; (* PP节点)-next=NULL; while(curr ) {prev=curr; curr=curr-next; insert _ for _ sort _ operation (PP node,prev ); }返回; }
b)对于待插入的节点,选择合适的位置插入即可
void insert _ for _ sort _ operation (node * * PP node,NODE* pNode ) {NODE* prev; 节点* Cur; /*在第一个数据之前输入pnode*/if(pnode-data ) PPnode(-data ) {pNode-next=*ppNode; * Pp节点=Pnode; 返回; }cur=*ppNode; while(cur ) if ) pnode-datacur-data ) break; prev=cur; cur=cur-next; }pNode-next=prev-next; prev-next=pNode; 返回; }