【資料結構】排序比較
排序 | 時間複雜度 | 穩定程度 | (基本有序)時間複雜度 | |
---|---|---|---|---|
插入 | 直接插入 | O(n^2) | 穩定 | O(n) |
交換 | 冒泡 | O(n^2) | 穩定 | O(n) |
交換 | 快速 | O(nLog2n) | 不穩定 | |
選擇 | 直接選擇 | O(n^2) | 不穩定 | |
選擇 | 堆 | O(Log2n) | 不穩定 | |
歸併 | 二路歸併 | O(Log2n) | 穩定 |
- n較大且待排記錄無規律,選O(Log2n)【快速、堆、歸併】
- n較大時,歸併>堆
相關推薦
【資料結構】排序比較
排序 時間複雜度 穩定程度 (基本有序)時間複雜度 插入 直接插入 O(n^2) 穩定 O(n) 交換
【資料結構】非比較排序--計數排序和基數排序
非比較排序 1、思想 不需要進行元素之間的比較,交換,線上性的時間內完成排序。 2、分類 1)計數排序 2)基數排序 3、優缺點 要求的空間比較多,是典型的以空間換時間的一種做法 計
【資料結構】8種排序的比較
直接插入排序 ①所給元素越接近有序,直接插入排序的時間效率越高 ②時間複雜度: O(N^2) ③空間複雜度: O(1) ④穩定性: 穩定 希爾排序 ①希爾排序是對直接插入排序的優化 ②當gap >
【資料結構】希爾排序(ShellSort)
概念: 希爾排序法,又稱縮小增量法。希爾排序法的基本思想是:先選定一個整數, 把待排序檔案中所有資料分成幾個組,所有距離為gap的資料分在同一組內,並對每一組內的資料進行排序。 然後,去重複上述分組和排序的工作。當到達gap=1時,所有資料在一組內
【資料結構】直接插入排序
概念: 直接插入排序是一種簡單的插入排序法,其基本思想是:把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中,直到所有的記錄插入完為止,得到一一個新的有序序列。 核心思想: &nb
【資料結構】計數排序
概念: 計數排序,又稱為鴿巢原理,是對雜湊定址法的變形應用。 核心思想是: 具體程式碼如下: void CountSort(int* a, int n)//計數排序 { int max = a[0]; int min = a[0]; for (in
【資料結構】選擇排序
概念: 每次從待排序的陣列元素中,選出最小或最大的,存放在序列的起始位置,直到全部待排序的陣列元素排完。 核心思想: 如果有n個元素需要排序,首先從n個元素中找到最小的那個元素,並與第0個位置上的元素交換,最大的那個元素與最後一個位置上的數交換(說明一點,如果沒有比第
【資料結構】【排序】選擇排序(直接選擇排序、堆排序)
【資料結構】【排序】選擇排序 ①簡單選擇排序 每次從序列中找出最大/最小元素,插入已排列部分的最後。 過程: 1、設一個變數min,先放在第一個元素的位置,設i,j,i=0,j=i+1。 2、在未排序陣列中找到最小的賦給min,與i比較,開始交換 3、i++ j+
【資料結構】八大排序之氣泡排序
氣泡排序:(升序為例) 利用兩個for迴圈每次比較相鄰的兩個元素,如果前一個元素比後一個元素大則交換兩個數。外層的for迴圈控制排序的總趟數,內層的for迴圈控制每一趟的相鄰兩個數的比較的次數 我們很輕易的看出: 氣泡排序的時間複雜度最
【資料結構】八大排序之快速排序(遞迴和非遞迴方法)
上一博文我們講了氣泡排序,但是由於他的時間複雜度過高為O(n*n),於是在氣泡排序的基礎上今天要說的是快速排序。 本文講述兩個內容: 1.快速排序的三種方法。 2.快速排序的優化 一.什麼是快速排序??? 通過一趟排序將要排序的資料分割成獨立的兩部
【資料結構】十一種排序演算法C++實現
練習了十一種排序演算法的C++實現:以下依次為,冒泡、選擇、希爾、插入、二路歸併、快排、堆排序、計數排序、基數排序、桶排序,可建立sort.h和main.cpp將程式碼放入即可執行。如有錯誤,請指出更正,謝謝交流。 // sort.h # include <
【資料結構】歸併排序-python實現
【資料結構】歸併排序--python 實現時間複雜度程式碼實現執行示例 歸併排序介紹 快速排序是典型的使用分治的思想來解決問題的演算法。分治策略會將原問題劃分為n個規模較小而結構與原問題相似的子問題。遞迴地解決這些子問題,然後再合併其結果,就得到原問題的解。
【資料結構】直接插入排序、詳細解釋希爾排序、直接選擇排序、選擇排序的
一、直接插入排序 將一個數組進行直接插入排序,每次取陣列中一個數A儲存起來,和此數下標之前已經排好的陣列進行比較(第一次因為前面沒有數,直接取陣列第二個數),假設需要升序數列,如果A數小於要比較的數,就繼續往陣列中更小下標的數比較(在這個過程中因為A數已經儲存起
【資料結構】歸併排序
歸併排序的基本思想是:將兩個(或以上)的有序表組成新的有序表。 更實際的意義:可以把一個長度為n的無序序列看成是n個長度為1的有序子序列,首先做兩兩歸併,得到個長度為2的子序列;再做兩兩歸併,...,如此重複,直到最後得到一個長度為n的有序序列。 例:關鍵字序列T=(21
【資料結構】快速排序(遞迴)
概念: 快速排序是Hoare於1962年提出的一種二叉樹結構的交換排序方法。 基本思想為:任取待排序元素序列中的某元素作為基準值,按照該排序碼將待排序集合分割成兩子序列,左子序列中所有元素均小於基準值,右子序列中所有元素均大於基準值,然後最左右子序列重複該過程,直到所有元素
【資料結構】6-1內部排序(選擇、插入、快排)
dataList類定義: class dataList { private: int number; int *data, *bdata;//data陣列是隨機生成的,排序更改的都是這個陣列,bdata就是用來存放排序前的 void reset();//重置陣列為初始生成的亂序
【資料結構】用模版實現大小堆、實現優先順序佇列,以及堆排序
一、用模版實現大小堆 如果不用模版的話,寫大小堆,就需要分別實現兩次,但是應用模版的話問題就簡單多了,我們只需要實現兩個仿函式,Greater和Less就行了,仿函式就是用類實現一個()的過載就實現了仿函式。這個看下程式碼就能理解了。再設計引數的時候,需要把模版
【資料結構】常見的排序方法的實現以及效能對比
前言: 排序演算法在筆試和麵試的時候經常出現,有時候面試官可能不止問我們排序的寫法,還會問相關演算法的一些效能的比較。平時學習時,由於排序演算法較多,如果不做一些歸納總結的話,很容易混為一談,並且沒有對每個排序有很明確的定位。就會導致在面試的時候啞口。 一、插入排序
【資料結構】BST:二叉排序樹演算法
建立二叉排序樹,實現樹的插入、刪除,前、中、後序遍歷(遞迴方式)等操作。 /***************************************** Copyright (c) 2015 Jingshuang Hu @filename:dem
【資料結構】--2.排序演算法
常見的排序演算法 :氣泡排序 、選擇排序、插入排序、歸併排序、快速排序、堆排序 https://www.cnblogs.com/eniac12/p/5329396.html #include<iostream> using namespace std; v