码迷,mamicode.com
首页 > 编程语言 > 详细

今日:链表排序

时间:2019-02-20 13:08:36      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:空间复杂度   int   排序   思想   nod   start   结果   oid   堆排序   

链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)


  用到的链表结构如下所示:

1 struct ListNode
2 {
3     int val;
4     ListNode* next;
5 };

 

 一、直接交换结点

1、直接插入排序【时间复杂度:O(n^2),空间复杂度:O(1)】
   插入排序的基本思想:将待排序表看作是左、右两部分,其中左边为有序区,右边为无序区;整个排序过程就是将右边无序区中的记录依次按关键字大小逐个插入到左边有序区中,以构成新的有序区,直到全部记录都排好序。
   如:

    初始序列:  [12] 15 09 20 06 36 28

    第一趟结果:[12 15] 09 20 06 36 28

    第二趟结果:[09 12 15] 20 06 36 28

    第三趟结果:[09 12 15 20] 06 36 28

    第四趟结果:[06 09 12 15 20] 36 28

    第五趟结果:[06 09 12 15 20 36] 28

    第六趟结果:[06 09 12 15 20 28] 36

  代码如下所示:

 1 void InsertionSortList()
 2 {
    //head为头指针
3   if (head == NULL || head->next == NULL) //若链表为空,返回 4   { 5     return; 6   } 7   ListNode *p = head->next->next; 8 9   ListNode* pend = head->next; 10 11   while (p) 12   { 13     //ListNode *tmp = pstart->next, *pre = pstart; 14     ListNode *tmp = head->next, *pre = head; 15 16     while (tmp != p && p->val >= tmp->val) //找到插入位置 17     { 18       tmp = tmp->next; 19       pre = pre->next; 20     } 21     if (tmp == p) 22     { 23       pend = p; 24     } 25     else 26     { 27       pend->next = p->next; 28       p->next = tmp; 29       pre->next = p; 30     } 31     p = pend->next; 32   } 33 34   return ; 35 }

 

今日:链表排序

标签:空间复杂度   int   排序   思想   nod   start   结果   oid   堆排序   

原文地址:https://www.cnblogs.com/t11383/p/10405763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!