[Interview] Bubble sort using singly-linked list
- Question :
- Bubble sort using singly-linked list
- 群暉面試題
- Idea :
- 在linked list 交換node與node時, 我們會想用換*next的方式。但是這裡是singly-linked list.
還會需要previously node。其實這裡單純直接換int val還比較簡單。不過算蠻偷吃步的
- 在linked list 交換node與node時, 我們會想用換*next的方式。但是這裡是singly-linked list.
- 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的更多相关文章
- [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 ...
- Java中的经典算法之冒泡排序(Bubble Sort)
Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...
- LeetCode 206 Reverse a singly linked list.
Reverse a singly linked list. Hint: A linked list can be reversed either iteratively or recursively. ...
- Bubble Sort (5775)
Bubble Sort Problem Description P is a permutation of the integers from 1 to N(index starting from ...
- Singly Linked List
Singly Linked List Singly linked list storage structure:typedef struct Node{ ElemType data; struct N ...
- Bubble Sort [ASM-MIPS]
# Program: Bubble sort # Language: MIPS Assembly (32-bit) # Arguments: 5 unordered numbers stored in ...
- HDU 5775 Bubble Sort(冒泡排序)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- Reverse a singly linked list
Reverse a singly linked list. /** * Definition for singly-linked list. * struct ListNode { * int val ...
- 2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)
Bubble Sort 题意: 给你一个1~n的排列,问冒泡排序过程中,数字i(1<=i<=n)所到达的最左位置与最右位置的差值的绝对值是多少 题解: 数字i多能到达的最左位置为min(s ...
随机推荐
- tf.clip_by_global_norm
首先明白这个事干嘛的,在我们做求导的时候,会遇到一种情况,求导函数突然变得特别陡峭,是不是意味着下一步的进行会远远高于正常值,这个函数的意义在于,在突然变得陡峭的求导函数中,加上一些判定,如果过于陡峭 ...
- HTML表单(来自MDN的总结)
表单介绍 HTML表单是用户和web站点或应用程序之间交互的主要内容之一.它们允许用户将数据发送到web站点.大多数情况下,数据被发送到web服务器,但是web页面也可以拦截它自己并使用它. HTML ...
- dubbo-go 中的 TPS Limit 设计与实现
前言 Apache Dubbo 是由阿里开源的一个RPC框架,除了基本的 RPC 功能以外,还提供了一整套的服务治理相关功能.目前它已经是 Apache 基金会下的顶级项目. 而 dubbo-go 则 ...
- shell学习----正则表达式
在使用sed和gawk时如果能够熟练的使用正则表达式,可以准确的过滤到自己需要的信息 Linux中,有两种流行的正则表达式引擎: POSIX基础正则表达式,BRE引擎 POSIX扩展正则表达式,ERE ...
- 全文检索 使用最新lucene3.0.3+最新盘古分词 pangu2.4 .net 实例
开发环境 vs2015 winform 程序 1 首先需要下载对应的DLL 文章后面统一提供程序下载地址 里面都有 2 配置pangu的参数 也可以不配置 采用默认的即可 3 创建索引,将索引存放到本 ...
- Windows环境下使用Mycat模拟分库分表-读写分离案例
一.基本环境 W7 64位.Mycat1.6.MySQL8.0 二.Mycat核心配置文件配置 解压Mycat1.6,并对server.xml.schema.xml.rule.xml三个核心配置文件做 ...
- delphi for DirectUI界面库
下面是form代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Cont ...
- phpexcel如何读和写大于26列的excel
主要运用到PHPExcel_Cell类的两个方法 1读取excel大于26列时. PHPExcel_Cell::columnIndexFromString($highestColumm)://由列名转 ...
- 20180907-Java Applet基础
Java Applet基础 applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以applet是一个全功能的Java应用程序. 如下所示是独 ...
- Nginx负载均衡与反向代理—《亿级流量网站架构核心技术》
当我们的应用单实例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到两台.几十台.几百台.然而,用户访问时是通过如http://www.XX.com的方式访问,在请求时,浏览器首先会查询DNS服务 ...