• Question :

    • Bubble sort using singly-linked list
    • 群暉面試題
  • Idea : 
    • 在linked list 交換node與node時, 我們會想用換*next的方式。但是這裡是singly-linked list.
      還會需要previously node。其實這裡單純直接換int val還比較簡單。不過算蠻偷吃步的
  • Code : [根本就是array版]
  • typedef struct Node{
    int val;
    struct Node *next;
    }Node, *NodePtr;
    void bubbleSort(NodePtr head) {
    int i,j,tmp;
    bool flag;
    for(i = 0; i < len-1 ;i++) {
    NodePtr curr = head;
    NodePtr next = head->next;
    flag = false;
    for(j=0; j < len-i-1 ;j++) {
    if(curr->val > next->val ) {
    tmp = curr->val;
    curr->val = next->val;
    next->val = tmp;
    flag = true;
    }
    }
    if(flag == false) break; // 沒有結點需要swap
    }
    }
  •   [修改*next 版]
void bubbleSort(NodePtr head) {
bool flag = true;
while(flag) {
flag = false;
NodePtr curr = head;
NodePtr prev = NULL;
while(curr->next){
if(curr->val > curr->next->val) {
flag = true;
curr = swap(curr,curr->next);
if(prev == NULL) //while swaping the head node
head = curr;
else
prev->next = curr;
}
prev = curr;
curr = curr->next;
}
}
}

    [使用dummyHead版] - 可以減少一個if, 來判斷swap頭結點的情況。

void bubbleSort(NodePtr head) {
bool flag = true;
NodePtr dummyHead = (NodePtr)malloc(sizeof(Node));
dummyHead->next = head;
while(flag) {
flag = false;
NodePtr curr = dummyHead->next;
NodePtr prev = dummyHead;
while(curr->next){
if(curr->val > curr->next->val) {
flag = true;
prev->next = curr = swap(curr,curr->next);
}
prev = curr;
curr = curr->next;
}
printf("flag:%d ",flag);
print_all(dummyHead->next);
}
}

  

  • 完整測資 : https://github.com/bittorrent3389/leetCode/blob/master/BubbleSort.c

[Interview] Bubble sort using singly-linked list的更多相关文章

  1. [LintCode] Delete Node in the Middle of Singly Linked List 在单链表的中间删除节点

    Implement an algorithm to delete a node in the middle of a singly linked list, given only access to ...

  2. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...

  3. LeetCode 206 Reverse a singly linked list.

    Reverse a singly linked list. Hint: A linked list can be reversed either iteratively or recursively. ...

  4. Bubble Sort (5775)

    Bubble Sort Problem Description   P is a permutation of the integers from 1 to N(index starting from ...

  5. Singly Linked List

    Singly Linked List Singly linked list storage structure:typedef struct Node{ ElemType data; struct N ...

  6. Bubble Sort [ASM-MIPS]

    # Program: Bubble sort # Language: MIPS Assembly (32-bit) # Arguments: 5 unordered numbers stored in ...

  7. HDU 5775 Bubble Sort(冒泡排序)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  8. Reverse a singly linked list

    Reverse a singly linked list. /** * Definition for singly-linked list. * struct ListNode { * int val ...

  9. 2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)

    Bubble Sort 题意: 给你一个1~n的排列,问冒泡排序过程中,数字i(1<=i<=n)所到达的最左位置与最右位置的差值的绝对值是多少 题解: 数字i多能到达的最左位置为min(s ...

随机推荐

  1. springMvc几个常用注解

    浏览器本省就是get ,post 可以用form表单 @RequestMapping: 作用:用来映射请求的url @RequestMapping注解的多个属性是与(且)的关系,必须同时满足 位置:可 ...

  2. C++ CMake 入门实战[转载]

    C++ CMake 入门实战 2016-11-05 CMake用于跨平台的编译系统,对于通常的c/c++工程,都是通过make来进行编译的,CMake可以通过指令生成Makefile文件来指导整个项目 ...

  3. 卷积神经网络 CNN 系列模型阐述

    http://www.sohu.com/a/134347664_642762 Lenet,1986年 https://github.com/BVLC/caffe/blob/master/example ...

  4. tuple&dict

    # n = (12,[23,56]) # n[1][0] = 89 #元组不可修改,但元组内部的列表内部的元素可以修改,但内部的列表的内部也是元组,则他不可修改 # print(n) # n = (1 ...

  5. C++11的新特性:右值引用

    先看代码 #include "pch.h" #include <iostream> #include <string> using namespace st ...

  6. less:避免编译

    .box { width: ~"calc(300px - 30px)"; } 编译成css .box { width: calc(300px - 30px); } importan ...

  7. 函数&&变量

    #*- encoding=utf-8 -*import sysprint(sys.getdefaultencoding()) def test(x,y,z): print(x) print(y) pr ...

  8. CreateMutex函数 (转)

    CreateMutex函数 该函数找出当前系统是否已经存在指定进程的实例.如果没有则创建一个互斥体. CreateMutex()函数可用来创建一个有名或无名的互斥量对象,其函数原型为: HANDLE ...

  9. 洛谷 P1407 稳定婚姻

    问题描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关.25岁的姗姗和男友谈恋爱半年就结婚,结婚不到两 ...

  10. NIO编程之多客户端聊天系统

    1. 服务端 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; im ...