如何學好資料結構?

2021-10-06 06:35:42 字數 1929 閱讀 2315

一. 氣泡排序

演算法步驟:

• 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

• 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。

• 針對所有的元素重複以上的步驟,除了最後乙個。

• 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

二. 選擇排序

• 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

• 再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。

• 重複第二步,直到所有元素均排序完畢。

三. 插入排序

• 將第一待排序序列第乙個元素看做乙個有序序列,把第二個元素到最後乙個元素當成是未排序序列。

• 從頭到尾依次掃瞄未排序序列,將掃瞄到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的後面。)

四. 希爾排序

• 選擇乙個增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;

• 按增量序列個數 k,對序列進行 k 趟排序;

• 每趟排序,根據對應的增量 ti,將待排序列分割成若干長度為 m 的子串行,分別對各子表進行直接插入排序。僅增量因子為 1 時,整個序列作為乙個表來處理,表長度即為整個序列的長度。

五. 歸併排序

• 申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列;

• 設定兩個指標,最初位置分別為兩個已經排序序列的起始位置;

• 比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置;

• 重複步驟 3 直到某一指標達到序列尾;

• 將另一串行剩下的所有元素直接複製到合併序列尾。

六. 快速排序

• 從數列中挑出乙個元素,稱為 「基準」(pivot);

• 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作;

• 遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序;

七. 堆排序

• 建立乙個堆 h[0……n-1];

• 把堆首(最大值)和堆尾互換;

• 把堆的尺寸縮小 1,並呼叫 shift_down(0),目的是把新的陣列頂端資料調整到相應位置;

• 重複步驟 2,直到堆的尺寸為 1。

八. 計數排序

• 花o(n)的時間掃瞄一下整個序列 a,獲取最小值 min 和最大值 max

• 開闢一塊新的空間建立新的陣列 b,長度為 ( max - min + 1)

• 陣列 b 中 index 的元素記錄的值是 a 中某元素出現的次數

• 最後輸出目標整數序列,具體的邏輯是遍歷陣列 b,輸出相應元素以及對應的個數

九. 桶排序

• 設定固定數量的空桶。

• 把資料放到對應的桶中。

• 對每個不為空的桶中資料進行排序

• 拼接不為空的桶中資料,得到結果

十. 基數排序

• 將所有待比較數值(正整數)統一為同樣的數字長度,數字較短的數前面補零

• 從最低位開始,依次進行一次排序

• 從最低位排序一直到最高位排序完成以後, 數列就變成乙個有序序列

如何學好資料結構和演算法

資料結構和演算法是電腦科學中最重要的課程,作為一名google的軟體工程師,我經常看到一些求職者或剛畢業的學生,他們對於資料結構和演算法的學習是遠遠不夠的。這不是說他們看的書是有問題的,或教授們教錯了內容,而是學生對這個課程的理解是不到位的。紮實掌握資料結構和演算法的關鍵並不是要對每一種資料結構和它...

學好資料結構的重要性

個人認為資料結構是程式設計最重要的基本功沒有之一!學了順序表和煉表,你就知道,在查詢操作更多的程式中,你應該用順序表 而修改操作更多的程式中,你要使用鍊錶 而單向鍊錶不方便怎麼辦,每次都從頭到尾好麻煩啊,怎麼辦?你這時就會想到雙向鍊錶or迴圈鍊錶。學了棧之後,你就知道,很多涉及後入先出的問題,例如函...

資料結構全攻略 學好資料結構的必經之路

zz 2013 09 16 09 23 380人閱讀收藏 舉報目錄 很多人在學習時一猛子紮進細節裡無法自拔,以至於顧此失彼,丟了西瓜撿了芝麻。這種學習方法特別浪費時間,效率也非常低下,以至於在學習的長河中慘遭淘汰。如果這種人繼續不思進取,那麼在激烈的社會競爭環境中也會慘遭淘汰。在學習時我們不妨先了解...