快速排序
jiyanfeng1
喜欢算法和编程的工科男
展开
-
交换次数最少的排序
In-place的排序算法,在排序过程中需要对两个元素进行两两的交换。问,什么样的排序算法,在排序过程中进行交换的次数最少?答:选择排序是常用算法中交换次数最少的排序算法。还有一个算法叫Cycle Sort。关于这个问题的讨论,参见下面的论述:Which sorting algorithm makes minimum number of memory writes?原创 2012-10-07 03:17:54 · 11965 阅读 · 0 评论 -
Pancake sorting 煎饼排序
Pancake sorting 煎饼排序原创 2015-07-21 12:04:59 · 2976 阅读 · 0 评论 -
[LeetCode] Merge K Sorted Linked Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.算法一:最简单的做法就是先1、2合并,12结果和3合并,123结果和4合并,…,123..k-1结果和k合并。两两合并的时候可以用递归的方法。我们计算一下复杂度。1、2合并,遍历2n个节点原创 2014-12-29 17:15:53 · 659 阅读 · 0 评论 -
多路归并排序 merge k sorted array, merge k sorted linked list
给定k个已经排序的数组,每个数组的长度是n。设计一个k路归并排序算法,把这k个已排序的数组归并成一个排序的数组。思路:取k个数组的第一个元素,建一个大小为k的最小堆。从堆顶取走元素,插入到输出数组中。从取走的那个堆顶元素对应的数组,取下一个元素,并插入堆。循环,直至k个数组都为空。原创 2012-10-07 04:40:50 · 3430 阅读 · 0 评论 -
Matching Nuts and Bolts 螺母螺帽的匹配
问题:给你一堆螺母和螺帽,每个螺母都有一个相对应的螺帽,但是他们之间的对应关系已经打乱。你可以比较螺母和螺帽的大小关系,但是你无法比较螺母和螺母的大小关系,你也无法比较螺帽和螺帽的大小关系。设计一个算法,找出螺母和螺帽的对应关系。思路:一个简单的方法就是,对每一个螺母,用线性搜索的方法找出对应的螺帽,复杂度是O(n^2)。下面给出一个类似于快速排序的算法,平均复杂度是O(n Log(n)原创 2015-01-15 00:03:06 · 4800 阅读 · 0 评论 -
[LeetCode] Merge Sorted Array 归并排序数组
Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assume that A has enough space (size that is greater or equal to m + n) to hold additional elements from B.原创 2014-12-08 05:52:11 · 896 阅读 · 0 评论 -
[LeetCode] 荷兰国旗问题 Sort Colors
类似问题:单链表快速排序Write a function that takes an array A and a beginning indexbeginand an ending index end into A, and rearranges the elements such that all elements less than A[begin] appear first, foll原创 2013-01-30 13:30:38 · 1438 阅读 · 0 评论 -
归并排序 merge sort
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。原创 2014-09-14 02:41:31 · 688 阅读 · 0 评论 -
快速排序 quick sort
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。原创 2014-09-14 02:56:36 · 815 阅读 · 0 评论 -
单链表的快速排序(转)
类似问题:荷兰国旗问题 单链表的快速排序和数组的快速排序在基本细想上是一致的,以从小到大来排序单链表为例,都是选择一个支点,然后把小于支点的元素放到左边,把大于支点的元素放到右边。 但是,由于单链表不能像数组那样随机存储,和数组的快排序相比较,还是有一些需要注意的细节:支点的选取,由于不能随机访问第K个元素,因此每次选择支点时可以取待排序那部分链表的头指针。遍历转载 2012-09-25 07:04:47 · 970 阅读 · 0 评论 -
比较次数最少的排序
问:什么排序方法需要的比较次数最少?答:排序算法可以分为两类。一类是基于比较的算法,例如MergeSort,QuickSort,InsertionSort,SelectionSort,BubbleSort。另一类算法根本不需要比较就可以完成排序,例如Counting Sort,Bucket Sort。对于基于比较的排序算法,InsertionSort和BubbleSort的比较次数往往较少原创 2012-10-07 03:25:27 · 15369 阅读 · 1 评论 -
[LeetCode] Maximum Gap 最大间隙问题
最大间隙问题转自:问题描述: 给定n个实数x1,x2,...,xn,求这n个实数在实轴上相邻2个数之间的最大差值,要求设计线性的时间算法 算法思想:原创 2014-09-16 07:26:30 · 2506 阅读 · 0 评论