首页 > 编程知识 正文

实现单链表的各种基本运算的算法,双向链表排序算法

时间:2023-05-06 01:02:04 阅读:51273 作者:4474

【声明】版权所有。 欢迎转载。 请勿用于商业用途。 联系方式: 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; 返回; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。