1. 程式人生 > >常用排序演算法效能分析

常用排序演算法效能分析

在平時寫程式碼時比較常用的幾種演算法,效能表格如下:

排序法

平均時間

最壞

穩定

額外空間

氣泡排序

On^2

On^2

穩定

O1

選擇排序

On^2

On^2

不穩定

O1

插入排序

On^2

On^2

穩定

O1

快速排序

Onlogn~ On

On^2

不穩定

Onlogn

堆排序

Onlogn

Onlogn

不穩定

O1

希爾排序

Onlogn

On^2

不穩定

O1

歸併排序

Onlogn

Onlogn

穩定

On

我們可以把演算法大致分為幾類:

交換排序類:氣泡排序,快速排序;

插入排序類:插入排序,希爾排序;

選擇排序類:選擇排序,堆排序;

歸併排序類:歸併排序;

在進行開發時可以按照實際情況選擇合適的演算法進行使用。

注:

    在學習過程中,發現有的書說簡單選擇排序是穩定的,有的書說是不穩定的。首先排序穩定的定義是:假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,ri=rj,且ri在rj之前,而在排序後的序列中,ri仍在rj之前,則稱這種排序演算法是穩定的;否則稱為不穩定的。

        通過這個定義,我們可以嘗試對一個小序列如:2,5,5,3進行選擇排序。

        排序前:2,5,5*,3

        排序後:2,3,5*,5

        從上面的排序過程中,我們可以看到排序後元素5的相對次序發生了變化。在一般情況下簡單選擇排序是穩定的,但如果有多個相同元素,就會產生不穩定的情況,如上面所列舉的例子,所以我認為簡單選擇排序是一般穩定,特殊情況不穩定。

相關推薦

常用排序演算法效能分析

在平時寫程式碼時比較常用的幾種演算法,效能表格如下: 排序法 平均時間 最壞 穩定 額外空間 氣泡排序 O(n^2) O(n^2) 穩定 O(1) 選擇排序

(考研必看)最全資料結構排序演算法效能分析與比較!!!

資料結構所有排序演算法效能分析與比較 轉載請標明出處weixin_44254963或璇小姐 通過對資料結構的學習,我發現數據結構中各種排序演算法的排序方法,過程,以及時間效能,空間效能都比較容易混淆,現就這些情況做如下總結,希望對大家有所幫助。 起泡排序(氣泡排序) 首先取第一個

八大常用排序演算法詳細分析 包括複雜度,原理和實現

1. 氣泡排序 1.1 演算法原理: S1:從待排序序列的起始位置開始,從前往後依次比較各個位置和其後一位置的大小並執行S2。  S2:如果當前位置的值大於其後一位置的值,就把他倆的值交換(完成一次全序列比較後,序列最後位置的值即此序列最大值,所以其不需要再參與冒泡)。  S3:將序列的最

常用排序演算法的python實現和效能分析

一年一度的換工作高峰又到了,HR大概每天都塞幾份簡歷過來,基本上一天安排兩個面試的話,當天就只能加班幹活了。趁著面試別人的機會,自己也把一些基礎演算法和一些面試題整了一下,可以階段性的留下些腳印——沒辦法,平時太忙,基本上沒有時間寫部落格。面試測試開發的話,

常用排序演算法穩定性、時間複雜度分析

1、  選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,        氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 2、研究排序演算法的穩定性有何意義?   首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前兩個相等的資

資料結構和演算法分析排序篇--歸併排序(Merge Sort)和常用排序演算法時間複雜度比較(附贈記憶方法)

歸併排序的基本思想 歸併排序法是將兩個或以上的有序表合併成一個新的有序表,即把待排序序列分成若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。注意:一定要是有序序列! 歸併排序例項: 合併方法: 設r[i……n]由兩個有序子表r

七大排序演算法效能分析

這裡我來集中分析一下七大排序演算法的效能問題。如果不當之處,敬請指正。 氣泡排序(Bubble) 排序演算法 平均情況下 最好情況 最壞情況 穩定性 空間複雜度 冒泡 O(n2) O(n) O(n2)

演算法分析(總結)排序演算法效能及比較總結

一、按平均時間將排序分為四類: (1)平方階(O(n2))排序      一般稱為簡單排序,例如直接插入、直接選擇和氣泡排序; (2)線性對數階(O(nlgn))排序      如快速、堆和歸併排序; (3)O(n1+£)階排序      £是介於0和1之間的常數,即0

javascript中兩種基本常用排序算法分析

穩定 得到 直觀 height 算法 錯誤 繼續 改進冒泡 有序 備註:內容大部分從網上復制,代碼為自己手寫。僅做知識的溫故知新,並非原創。 1.冒泡排序(Bubble Sort) (1)算法描述 冒泡排序是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個

Java 常用排序演算法總結

氣泡排序:  /*冒泡演算法*/ public class BubbleSort { public static void bubble_sort(int[] arr){ int temp; for(int i = 0; i < arr

常用排序演算法的時間複雜度和空間複雜度及特點

一、常用排序演算法的時間複雜度和空間複雜度表格 二、特點 1.歸併排序: (1)n大時好,歸併比較佔用記憶體,記憶體隨n的增大而增大,但卻是效率高且穩定的排序演算法。 (2)歸併排序每次遞迴都要用到一個輔助表,長度與待排序的表長度相同,雖然遞迴次數是O(log2n),但每次

Java種八種常用排序演算法

目錄: 1.直接插入排序 2.希爾排序 3.簡單選擇排序 4.堆排序 5.氣泡排序 6.快速排序 7.歸併排序 8.基數排序   1. 直接插入排序 經常碰到這樣一類排序問題:把新的資料插入到已經排好的資料列中。 將第一個數和第二個數排序,然後構成一個有序序列 將第三個數插

c語言實現常用排序演算法

#include <stdio.h> #include <stdlib.h> #define arrLen(arr) sizeof(arr)/sizeof(arr[0]) void print(int arr[], int len) { int i = 0; fo

Various sorting algorithms 排序演算法總結分析

Contents Overview 0-file I/O 1-bubble sort algorithm description Overview There exists so many kinds of

資料結構與演算法常用排序演算法總結

排序演算法穩定性的簡單形式化定義為:如果Ai = Aj,排序前Ai在Aj之前,排序後Ai還在Aj之前,則稱這種排序演算法是穩定的。通俗地講就是保證排序前後兩個相等的數的相對順序不變。   對於不穩定的排序演算法,只要舉出一個例項,即可說明它的不穩定性;而對於穩定的排序演算法,必須對演算

【 模擬 】基於TOA的定位演算法效能分析(不同接收站數量下的比較)

研究接收機數量對SNR = 30 dB的非線性和線性方法的MSPE效能的影響。 從最小數量的感測器開始,即L = 3,它們的位置是(0,0),(10,0)和(10,10)。 然後將具有座標(0,10),(0,5),(5,0),(10,5)和(5,10)的接收器連續新增到L = 8。未知源位於 (

【 模擬 】基於TOA的定位演算法效能分析(不同信噪比下的比較)

Comparison of Nonlinear and Linear Approaches with CRLB for TOA - Based Positioning for Different SNRs 上篇博文:【 筆記 】定位演算法效能分析 給出了各種定位演算法效能分析的理論

【 筆記 】定位演算法效能分析

目錄 1 CRLB Computation 2 Mean and Variance Analysis PERFORMANCE ANALYSIS FOR LOCALIZATION ALGORITHMS CRLB給出了使用相同資料的任何無偏估計可獲得的方差的下界,因此它可以作為與

常用排序演算法中的時間複雜度和空間複雜度

排序法 最差時間分析 平均時間複雜度 穩定度 空間複雜度 氣泡排序 O(n2) O(n2) 穩定 O(1) 快速排序 O(n2) O(n*log2n) 不穩定 O(log2n)~O(n) 選擇排序 O(n2) O(n2) 不穩定

八種常用排序演算法(Java)

01演算法分類 02時間複雜度 03相關概念 穩定:如果a原本在b前面,而a=b,排序之後a仍然在b的前面。 不穩定:如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面。 時間複雜度:對排序資料的總的操作次數。反映當n變化時,操作次數呈現什麼規律。