Sorting 排序

\To sort small sets of data, bubble sort may be a better option since it can be implemented quickly, but for larger datasets, the speedup from quicksort might be worth the trouble implementing the algorithm.


1. Bubble Sort

像冒泡一样把数字顶上去。

Best case run time: O(n)  如果整个数组本身就拍好序了。 这个O(n)非常confuse我。 因为即便已经sort好的array,每一次pass你不还得判断n-1个相邻的number谁大嘛。

后来发现原来会有一个优化的操作在bubble sort里,用一个变量来知道我们一次pass swap了几次,如果0次,就break for loop。

”Best case in Bubble Sort is when the complete array is sorted. In that case you compare the adjacent element in the first pass and you keep a track of how many swaps you made.

As the complete array is sorted, your number of swaps will be zero. Hence you will break out of the loop. :)“



Worst Case: O(n^2)

Optimized:


2.  Quick Sort

找一个Pivot, 然后把array 分成两个部分around pivot. [比pivot小的全部去left subarray, 比pivot大的全部去right subarray]. 这一步会花这个算法里最多的时间,O(n), 之后就简单了。用递归对left, right array重复一样的步骤。然后我们假设left, right array已经排序好了,这时候只要O(1)时间把他们merge起来就好了。

 找pivot的办法 可以Always Pick first element 或者Always Pick Last Element. 或者Pick a random.

分析类似QuickSort这种递归了好多层的可以用Master Theorem.


on average, the algorithm takesO(nlogn) comparisons to sort items. In the worst case, it makes O(n2) comparisons, though this behavior is rare.

3. Merge Sort

无论best, worst, average case, 都是O(nlogn)的算法。绝对的NlogN!

Merge Sort跟Quick Sort很像,都是先把array 分成两个部分。 但是不同的是,Merge Sort在分的这个阶段基本不干什么活,【因为不用找pivot一个一个比大小】,干活的主要是merge 的时候。


使用Master Theorem: 


4. Insertion Sort

If the list is almost sorted, then Insertion Sort performs in linear O(n) time

如果整个数组几乎排序好的话,Insertion Sort O(n).


Selection Sort:  O(n^2)

视频:https://www.youtube.com/watch?v=xWBP4lzkoyM

The selection sort algorithm sorts an array by repeatedly finding the minimum element (considering ascending order)from unsorted part and putting it at the beginning. The algorithm maintains two subarrays in a given array.

Selection sort每次找min都需要scan一遍remaining 的unsorted sections. 

1) The subarray which is already sorted.

2) Remaining subarray which is unsorted.



所以既然Insertion Sort 和Selection Sort都是O(N^2), 为什么我们还用?

对于Small array, insertion 和 selection sort 非常快。

Selection Sort比insertion好的地方在于 Selection sort的writes/swaps 比较少。O(n) 因为找n 次min

Insertion Sort 要O(nlogn).

write的比较少,read 多的好处是用在Flash Memory里,write太多减少flash memory 寿命。

Bucket Sort

counting sort:

https://www.cnblogs.com/dongkuo/p/4832849.html



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容