摘要: 题目原文: Nuts and bolts. A disorganized carpenter has a mixed pile of n nuts and n bolts. The goal is to find the corresponding pairs of nuts and bolts. 阅读全文
posted @ 2017-07-25 20:15 evasean 阅读(1306) 评论(1) 推荐(0) 编辑
摘要: 快速排序也是一种分治算法。主要思想是选取一个切分点,将大于切分点的元素都放置到数组右侧,小于切分点的元素都放置到数组左侧;然后递归,再对切分点左侧和右侧分别排序。 归并排序时递归在前,归并在后,快速排序是切分在前,排序在后。 快速排序的运行时间在1.39nlogn的某个常数因子范围之内,归并排序也能 阅读全文
posted @ 2017-07-25 14:15 evasean 阅读(1832) 评论(0) 推荐(0) 编辑
摘要: 归并排序有两种实现方式,自顶向下和自底向上。前者的思想是分治法,现将数组逐级二分再二分,分到最小的两个元素后,逐级往上归并,故其核心在于归并。后者的思想相反,采用循环的方式将小问题不断的壮大,最后变成整个大问题。 归并需要有一个同等大小的辅助数组aux,现将需要归并的元素copy至辅助数组aux中, 阅读全文
posted @ 2017-07-25 11:23 evasean 阅读(2781) 评论(0) 推荐(0) 编辑
摘要: 希尔排序是对插入排序的优化,将插入排序的交换步长由1增加到h。 希尔排序的思想是使数组中任意间隔为h的元素有序。步长调幅为h = 3*h + 1, 也就是1,4,13,40,121,364, 1003....这种步长算法是经过论文证明为比较高效的步长。 最开始由最大步长开始排序,最大步长为 whil 阅读全文
posted @ 2017-07-25 11:15 evasean 阅读(446) 评论(0) 推荐(0) 编辑
摘要: 插入排序的基本思想就是遍历一边列表,将a[i]依次通过a[i-1]、a[i-2]、a[i-3]...依次比较并交换位置的方式插入合适的位置。 for: i from 0~n-1{ for: j from i~0 if(a[j] <= a[j-1]) 交换a[j]和a[j-1] break; } 阅读全文
posted @ 2017-07-25 10:58 evasean 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 选择排序核心思想是通过每一次遍历选择最小元素: for: i from 0~n-1 { for j from i+1~n-1 选出最小元素a[min] 将选出的最小元素a[min]与a[i]交换位置 } 阅读全文
posted @ 2017-07-25 10:49 evasean 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 题目原文: Shuffling a linked list. Given a singly-linked list containing n items, rearrange the items uniformly at random. Your algorithm should consume a 阅读全文
posted @ 2017-07-25 10:30 evasean 阅读(1673) 评论(0) 推荐(1) 编辑
摘要: 在做Coursera上的Algorithms第三周测验练习的时候有一道链表随机排序问题,刚开始没有什么思路,就想着先把单向链表归并排序实现了,再此基础上进行随机排序的改造。于是就结合归并排序算法,实现了单向链表的归并排序。 阅读全文
posted @ 2017-07-25 10:25 evasean 阅读(1609) 评论(0) 推荐(0) 编辑