单链表排序

1.代码实现如下

node* bubble(node* head, int len)

{

  int nVal = 0;

  node* pCur=NULL;

  node* pNext=NULL;

  //外部循环为len

  for(int i=0; i<len; i++)

  {

    pCur=head;

    pNext=pCur->next;

  

    //内部循环逐次减少

    for(int j=len-i-1; j>0; j--)

    {

      if(pCur->data > pNext->data)

      {

        nVal=pCur->data;

        pCur->data=pNext->data;

        pNext->data=nVal;

      }

      pCur=pCur->next;

      pNext=pNext->next;

    }

  }

}

时间: 2024-08-07 21:19:39

单链表排序的相关文章

148. Sort List (java 给单链表排序)

题目:Sort a linked list in O(n log n) time using constant space complexity. 分析:给单链表排序,要求时间复杂度是O(nlogn),空间复杂度是O(1).时间复杂度为O(nlogn)的排序算法有快速排序和归并排序, 但是,对于单链表来说,进行元素之间的交换比较复杂,但是连接两个有序链表相对简单,因此这里采用归并排序的思路. 编码: public ListNode sortList(ListNode head) { if(hea

笔试,面试,C/C++,数据结构单链表排序(改进冒泡排序)

void BubbleSortNode(SListNode *&pHead)//单链表排序 {  assert(pHead);  SListNode *tail = NULL;  int Bool = 0;  //若没有进行交换提前返回  while (tail!=pHead->next)  {   Bool = 0;   SListNode *tmp = pHead;   SListNode *tmpnext = tmp->next;   while (tmp->next !=

将单链表排序的两种方法

对单链表排序,通常有两种方法.(PS:考察一个程序员的C语言编程功底,通常看他是否能娴熟的操作链表就知道了.) 方法1:将每一个结点保存到额外的数组中,对数组进行排序,然后根据有序的数组重新构建链表. 方法2:直接对链表进行插入排序,但是实现起来比较复杂一些. 显然,方法1最为简单,因为将链式存储L先转化为顺序存储a[],对顺序存储a[]排序,就避免了较为复杂的链接指针操作.一旦对顺序存储a[]排好序后,根据a[]重新构建一个链表是易如反掌的事情. 1. 单链表的定义如下 typedef str

12.单链表排序

12.单链表排序 思路: 参见基本函数13://冒泡排序链表,具体的做法是“狸猫换太子”,即只交换节点中的值,对链表结构不做改动. void sortList(Node*& Head); //链表排序 //排序的方法是不破坏结构,有“狸猫换太子”的意思,只进行value的交换,不破坏链表结构 void sortList(Node*& Head) {   int count=numOfNodes(Head);   if(count==0||count==1)   {    return ;

单链表排序(插入与归并)

struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; /* * 单链表的插入排序, 插入排序是一种稳定排序 */ class Solution7 { public: ListNode* insertionSortList(ListNode* head) { if(head == NULL || head->next == NULL) return head; ListNode *

奇数结点升序偶数结点降序的单链表排序(Python实现)

题目 一个链表,奇数结点升序,偶数结点降序,要求变成一个全升序的链表. 例如:1->8->2->7->3->6->4->5,变为1->2->3->4->5->6->7->8 解析 按照以下步骤处理: 按照奇偶位拆分为两个链表 反转偶数结点构成的链表 合并两个递增链表 Python实现 # -*- coding:utf-8 -*- class Node(object): def __init__(self, val=None

单链表排序——快速排序实现

利用快速排序,同向一前一后两个指针 #ifndef LIST_H_ #define LIST_H_ #include <iostream> #include <utility> class List { private: struct ListNode { int _value; ListNode* _next; }; public: List(): _head(nullptr) {} ~List() { while (nullptr != _head) { auto tmp =

单链表排序--归并排序

#include <iostream> #include <cstdlib> using namespace std; struct ListNode //默认为public { int data; ListNode* next; ListNode(int x, ListNode* nextNode):data(x), next(nextNode){} }; ListNode* mergeData(ListNode* first, ListNode* second) { if(fi

【LeetCode】 sort list 单链表的归并排序

题目:Sort a linked list in O(n log n) time using constant space complexity. 思路:要求时间复杂度O(nlogn) 知识点:归并排序,链表找到中点的方法 存在的缺点:边界条件多考虑!!! /** * LeetCode Sort List Sort a linked list in O(n log n) time using constant space complexity. * 题目:将一个单链表进行排序,时间复杂度要求为o