1. 程式人生 > >十大經典排序演算法動畫,看我就夠了!

十大經典排序演算法動畫,看我就夠了!

點選上方“程式人生”,選擇“置頂公眾號”

第一時間關注程式猿(媛)身邊的故事


640?wx_fmt=jpeg

圖片源自:モブサイコ100

作者

程式設計師小吳

如需轉載,請聯絡我們。


在前面的章節中詳細的講解分析了十大經典排序演算法,本文將進行一個大總結。

Tip 為了演示更加清楚,本文中所有的動畫都放慢了速度,因此GIF大小對比之前會有所增大,圖片載入速度會變慢。

排序演算法是《資料結構與演算法》中最基本的演算法之一。

排序演算法可以分為內部排序外部排序

內部排序是資料記錄在記憶體中進行排序。

而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。

常見的內部排序演算法有:插入排序、希爾排序、選擇排序、氣泡排序、歸併排序、快速排序、堆排序、基數排序等。

用一張圖概括:

640?wx_fmt=png

關於時間複雜度:

  1. 平方階 (O(n2)) 排序 各類簡單排序:直接插入、直接選擇和氣泡排序。

  2. 線性對數階 (O(nlog2n)) 排序 快速排序、堆排序和歸併排序;

  3. O(n1+§)) 排序,§ 是介於 0 和 1 之間的常數。 希爾排序

  4. 線性階 (O(n)) 排序 基數排序,此外還有桶、箱排序。

關於穩定性:

  1. 穩定的排序演算法:氣泡排序、插入排序、歸併排序和基數排序。

  2. 不是穩定的排序演算法:選擇排序、快速排序、希爾排序、堆排序。

 氣泡排序

640?wx_fmt=gif

 選擇排序

640?wx_fmt=gif

 插入排序

640?wx_fmt=gif

希爾排序

640?wx_fmt=gif

 歸併排序

640?wx_fmt=gif

 快速排序

640?wx_fmt=gif

堆排序

640?wx_fmt=gif

計數排序

640?wx_fmt=gif

桶排序

640?wx_fmt=gif

 基數排序

640?wx_fmt=gif


文章思路開源專案地址:https://github.com/hustcc/JS-Sorting-Algorithm,整理人 hustcc。


- The End -

「若你有原創文章想與大家分享,歡迎投稿。」

加編輯微信ID,備註#投稿#:

程式 丨 druidlost  


640?wx_fmt=jpeg


2018 中國大資料技術大會

BDTC 2018


BDTC 2018中國大資料技術大會攜主題“大資料新應用”再度強勢來襲。本次大會由華東師範大學副校長、教授周傲英,百度商業智慧實驗室主任熊輝,阿里巴巴副總裁李飛飛三位會議主席對大會內容把關,多位兩院院士參與指導,由最瞭解行業痛點的一線從業者為同行打造。


掃描下方二維碼或點選【閱讀原文】快速購票。現在購票還有機會獲得大資料圖書一本(中國科學院院士梅巨集主編的《大資料導論》或華中科技大學教授金海主編的《大資料處理》),數量有限!


640?wx_fmt=jpeg


推薦閱讀:

640?wx_fmt=gif

print_r('點個贊吧');
var_dump('點個贊吧');
NSLog(@"點個贊吧!");
System.out.println("點個贊吧!");
console.log("點個贊吧!");
print("點個贊吧!");
printf("點個贊吧!\n");
cout << "點個贊吧!" << endl;
Console.WriteLine("點個贊吧!");
fmt.Println("點個贊吧!");
Response.Write("點個贊吧");
alert(’點個贊吧’)