資料結構和算法系列
插入排序演算法類似於玩撲克時抓牌的過程,玩家每拿到一張牌都要插入到手中已有的牌裡,使之從小到大排好序。
#include <stdio.h> void main() { printf("撲克牌排序演算法:\n"); int arr[5] = {1,200,3,45,2}; int i, k, j; for (i = 0; i < 5; i++) { k = arr[i]; j = i - 1; while(j >= 0 && arr[j] > k) { arr[j+1] = arr[j]; j--; } arr[j+1] = k; } printf("%d %d %d %d %d", arr[0], arr[1], arr[2], arr[3], arr[4]); }
相關推薦
資料結構和算法系列3--複雜度分析(下)
複雜度分析的4個概念 1.最壞情況時間複雜度:程式碼在最理想情況下執行的時間複雜度。 2.最好情況時間複雜度:程式碼在最壞情況下執行的時間複雜度。 3.平均時間複雜度:用程式碼在所有情況下執行的次數的加權平均值表示。 4.均攤時間複雜度:在程式碼執行的所有複雜度情況中絕大部分是低級別的複
資料結構和算法系列 - 一致性hash演算法
1 基本場景 比如你有 N 個 cache 伺服器(後面簡稱 cache ),那麼如何將一個物件 object 對映到 N 個 cache 上呢,你很可能會採用類似下面的通用方法計算 object 的 hash 值,然後均勻的對映到到 N 個 cache ; hash(object)%N
資料結構和算法系列6 七大排序之直接選擇排序和堆排序
上一篇我們總結了交換排序的氣泡排序和快速排序。那麼這一篇我們要總結的是選擇排序,選擇排序分為直接選擇排序和堆排序,我們主要分以下幾點進行總結。 1,直接選擇排序及演算法實現 2,堆排序及演算法實現 1,直接選擇排序及演算法實現 直接選擇排序(Straight Select Sort)是一種簡單的排序方法,它
Java資料結構和算法系列3--ThreadLocal類原理詳解
1.ThreadLocal介紹 Java實現多執行緒的2種方式,繼承Thread類和實現Runnable介面。今天我們介紹下另外一種常用的多執行緒類ThreadLocal類。 ThreadLocal在維護變數時,為每個使用變數的執行緒提供了獨立的副本,所以每
資料結構和算法系列
插入排序演算法類似於玩撲克時抓牌的過程,玩家每拿到一張牌都要插入到手中已有的牌裡,使之從小到大排好序。 #include <stdio.h> void main() { prin
看圖輕鬆理解資料結構與算法系列(Radix樹)
前言 推出一個新系列,《看圖輕鬆理解資料結構和演算法》,主要使用圖片來描述常見的資料結構和演算法,輕鬆閱讀並理解掌握。本系列包括各種堆、各種佇列、各種列表、各種樹、各種圖、各種排序等等幾十篇的樣子。 Radix樹 Radix樹,即基數樹,也稱壓縮字首樹,是一種提供key-value儲存查詢的資料結構。與
資料結構與算法系列 目錄(轉)
轉載地址:https ://blog.csdn.net/l_215851356/article/details/77659462 最近抽空整理了 “資料結構和演算法” 的相關文章在整理過程中,對於每種資料結構和演算法分別給出 “C”, “C ++” 和 “Java” 的這三種語言
資料結構與算法系列1--簡介
為什麼要學習資料結構和演算法? 1.直接好處是能夠有寫出效能更優的程式碼 2.演算法,是一種解決問題的思路和方法,有機會應用到生活和事業的其他方面。 3.長期來看,大腦思考能力是個人最重要的核心競爭力,而演算法是為數不多的能夠有效訓練大腦思考能力的途徑之一。 什麼是資料結構?什麼是演
資料結構與算法系列6--棧
什麼是棧? 1.後進者先出,先進者後出,這就是典型的“棧”結構。 2.從棧的操作特性來看,是一種“操作受限”的線性表,只允許在端插入和刪除資料。 什麼時候使用? 當某個資料集合只涉及在某端插入和刪除資料,且滿足後進者先出,先進者後出的操作特性時,我們應該首選棧這種資料結構。
資料結構與算法系列5--連結串列
什麼是連結串列? 1.和陣列一樣,連結串列也是一種線性表。 2.從記憶體結構來看,連結串列的記憶體結構是不連續的記憶體空間,是將一組零散的記憶體塊串聯起來,從而進行資料儲存的資料結構。 3.連結串列中的每一個記憶體塊被稱為節點Node。節點除了儲存資料外,還需記錄鏈上下一個節點的地址,即
資料結構與算法系列4--陣列
什麼是陣列? 陣列(Array)是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。陣列的一個最大特性就是支援下標隨機訪問陣列元素。 補充: 線性表就是資料排成像一條線一樣的結構。每個線性表上的資料最多隻有前和後兩個方向。其實除了陣列,連結串列、佇列、棧等也是線
資料結構與算法系列7--佇列
什麼是佇列? 1.先進者先出,這就是典型的“佇列”結構。 2.支援兩個操作:入隊enqueue(),放一個數據到隊尾;出隊dequeue(),從隊頭取一個元素。所以,和棧一樣,佇列也是一種操作受限的線性表。 佇列的應用也非常廣泛,特別是一些具有某些額外特性的佇列,比如迴圈佇列、阻塞佇列、
02-看圖理解資料結構與算法系列(單向連結串列)
單向連結串列 單向連結串列屬於連結串列的一種,也叫單鏈表,單向即是說它的連結方向是單向的,它由若干個節點組成,每個節點都包含下一個節點的指標。 單鏈表特點 建立單鏈表時無需指定連結串列的長度,這個比起陣列結構更加有優勢,而陣列縱使實現成動態陣列也是需要指定一個更大的陣
01-看圖理解資料結構與算法系列(陣列)
陣列 陣列是最熟悉也是最基礎的一種結構了,有限個相同資料型別的元素按順序排列的集合為陣列。陣列的資料是連續的,有上界下界,在其中的元素都有屬於自己的索引值,即下標,通過這些下標就能定位到陣列值。 根據維度的不同可以將陣列分為一維陣列、二維陣列、三維陣列等等,以此類推。 一維陣列
07-看圖理解資料結構與算法系列(選擇排序)
選擇排序 選擇排序是一種很簡單直觀的排序演算法,主要思想就是每次從待排序的元素中選擇出最大或最小的那個元素,然後將其放至已排序序列的末尾,直到全部待排序序列都排序完畢。 排序要點 初始狀態時,待排序序列為a1,a2,...an,已排序序列為空。 第一趟排序,從
06-看圖理解資料結構與算法系列(AVL樹)
AVL樹 AVL樹,也稱平衡二叉搜尋樹,AVL是其發明者姓名簡寫。AVL樹屬於樹的一種,而且它也是一棵二叉搜尋樹,不同的是他通過一定機制能保證二叉搜尋樹的平衡,平衡的二叉搜尋樹的查詢效率更高。 AVL樹特點 AVL樹是一棵二叉搜尋樹。 AVL樹的左右子節點也是
05-看圖理解資料結構與算法系列(基於陣列的棧)
棧 棧是一種線性儲存結構且運算受限的線性表,它的插入和刪除運算操作被限制在表的一端,該端稱為棧頂,而另外一端則稱為棧底。 棧中的資料以後進先出(Last In First Out 即LIFO)方式進出棧。 棧的實現 棧的實現方式有多種方式,主要是使用不同的結構來儲存棧元素,比如使用陣列、
12-看圖理解資料結構與算法系列(氣泡排序)
氣泡排序 氣泡排序是一種很簡單的排序演算法,主要思想就是不斷走訪待排序序列,每次只比較兩個相鄰元素,如果這倆元素順序不符合要求則對換它們,不斷重複知道沒有相鄰元素需要對換。在不斷走訪比較過程中,越大的元素經過交換會慢慢走到數列頂端,所以看起來它就像氣泡一樣不斷往上冒,於是就叫冒泡。
11-看圖理解資料結構與算法系列(B樹的刪除)
刪除操作 刪除操作比較複雜,主要是因為刪除的項可能在葉子節點上也可能在非葉子節點上,而且刪除後可能導致不符合B樹的規定,這裡暫且稱之為導致B樹不平衡,於是要進行一些合併、左旋、右旋等操作,使之符合B樹的規定(即讓B樹平衡)。另外,如果是刪除非葉子節點項需要先找到中序前驅來替換。 情況
10-看圖理解資料結構與算法系列(B+樹)
B+樹 B+樹是B樹的一種變體,也屬於平衡多路查詢樹,大體結構與B樹相同,包含根節點、內部節點和葉子節點。多用於資料庫和作業系統的檔案系統中,由於B+樹內部節點不儲存資料,所以能在記憶體中存放更多索引,增加快取命中率。另外因為葉子節點相連遍歷操作很方便,而且資料也具有順序性,便於區間查詢。