【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

相比较线性表的排序而言,链表排序的内容稍微麻烦一点。一方面,你要考虑数据插入的步骤;另外一方面你也要对指针有所顾虑。要是有一步的内容错了,那么操作系统会马上给你弹出一个exception。就链表的特殊性而言,适合于链表的排序有哪些呢?

(1)插入排序    (适合)

(2)冒泡排序    (适合)

(3)希尔排序    (适合)

(4)选择排序    (适合)

(5)快速排序    (不适合)

(6)合并排序    (不适合)

(7)基数排序     (不适合)

(8)堆排序         (不适合)

其实,一般来说。如果涉及到数据之间的相对关系调配,那么只适合线性排序;如果只是数据内容之间的相互交换,那么这种排序方法也比较适合链表的排序。快速排序、合并排序、堆排序都涉及到了中间值的选取问题,所以不大适合链表排序。

为了说明链表排序是怎么进行的,我们可以利用插入排序作为示例,描述链表是怎么进行插入排序的。

 a)首先遍历节点,一边是排序好的节点,一边是待排序的节点

void sort_for_link_node(NODE** ppNode)
{NODE* prev;NODE* curr;if(NULL == ppNode || NULL == *ppNode)return;curr = (*ppNode) ->next;(*ppNode) ->next = NULL;while(curr){prev = curr;curr = curr->next;insert_for_sort_operation(ppNode, prev);}return;
}

 b)对于待插入的节点,选择合适的位置插入即可

void insert_for_sort_operation(NODE** ppNode, NODE* pNode)
{NODE* prev;NODE* cur;/* 在第一个数据之前插入pNode */if(pNode->data < (*ppNode)->data){pNode->next = *ppNode;*ppNode = pNode;return;}cur = *ppNode;while(cur){if(pNode->data < cur->data)break;prev = cur;cur = cur->next;}pNode->next = prev->next;prev->next = pNode;return;
}

一步一步写算法(之链表排序)相关推荐

  1. 一步一步写算法(之排序二叉树删除-1)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 相比较节点的添加,平衡二叉树的删除要复杂一些.因为在删除的过程中,你要考虑到不同的情况,针对每 ...

  2. 一步一步写算法(之排序二叉树删除-3)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 3 普通节点的删除 3.1 删除的节点没有左子树,也没有右子树 测试用例1: 删除节点6 /* ...

  3. 一步一步写算法(之排序二叉树)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们讲过双向链表的数据结构.每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节 ...

  4. 一步一步写算法(之排序二叉树线索化)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们谈到了排序二叉树,还没有熟悉的同学可以看一下这个,二叉树基本操作.二叉树插入.二叉树删 ...

  5. 一步一步写算法(之排序二叉树插入)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 二叉树的节点插入比较简单.一般来说,二叉树的插入主要分为以下两个步骤: 1) 对当前的参数进行 ...

  6. 一步一步写算法(之排序二叉树的保存和加载)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 排序二叉树是我们开发中经常使用到的一种数据结构,它具有较好的插入.删除.查找特性.但是由于二叉 ...

  7. 一步一步写算法(之排序二叉树删除-2)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 2.4 删除节点的左右子树都存在,此时又会分成两种情形 1)左节点是当前左子树的最大节点,此时 ...

  8. 链表排序算法(Java实现)

    插入排序 对链表进行插入排序,是最简单的一种链表排序算法,用于插入排序是迭代的,所以每次只移动一个元素,直到所有元素可以形成一个有序的输出列表.        每次迭代中,插入排序只从输入数据中移除一 ...

  9. 一步一步写算法(之图结构)

    原文:一步一步写算法(之图结构) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 图是数据结构里面的重要一章.通过图,我们可以判断两个点之间是 ...

最新文章

  1. idea工具使用总结
  2. wordpress自动批量定时发布插件 DX-auto-publish
  3. EVC4.0+AdoCe3.1访问Access数据库全攻略(附带说明及例程)
  4. buu-[RoarCTF2019]polyre(控制流平坦化,虚假控制流程)
  5. windows命令行安装python3_Python3---windows安装与运行
  6. spark sql 1.2.0 测试
  7. 修改Linux的基本配置(如主机名、ip等)
  8. 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档
  9. acwing1304. 佳佳的斐波那契
  10. 2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)
  11. php删除excel文件,PHPExcel:HTML到Excel,写入删除excel文件中的CSS
  12. 使用Maven在jar中包含依赖项
  13. redis 在 mac 下的安装与使用
  14. C语言打印打印ASCLL表
  15. 百度地图内置 市级+县级 区域代码
  16. 前端页面预览word_页面预览Word
  17. java程序员电脑内存配置_学习JAVA对电脑配置有要求吗
  18. movs 数据传送指令_1.数据传送指令中,错误的操作是()。 A.MOVSS[BX+DI],1000H B.......
  19. sql中将字符串转换成日期
  20. 1、spss中做相关分析

热门文章

  1. 如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)
  2. 腾讯云自曝自家技术只值1分钱,这技术以后谁还敢用
  3. 词法分析程序 LEX和VC6整合使用的一个简单例子
  4. Android Studio 使用笔记:快捷键
  5. asp.net中异步调用WebService(异步页)[转]
  6. Rails测试《十》不能错过的杂七杂八
  7. 设计模式--6大原则--依赖倒置原则
  8. 设计模式1【续】:动态设定行为
  9. Python3爬虫(六) 解析库的使用之Beautiful Soup
  10. K8S_Google工作笔记0012---通过二进制方式_部署master组件