Java數據結構與算法——排序(基礎概念)

聲明:碼字不易,轉載請註明出處,歡迎文章下方討論交流。

前言:Java數據結構與算法專題會不定時更新,歡迎各位讀者監督。在介紹各種排序算法以前,本篇先聊聊算法中的一些必備知識。java

0、排序算法索引(待更)

Java數據結構與算法——桶排序
Java數據結構與算法——快速排序算法

一、時間複雜度

算法的時間複雜度是一個函數,其定量的描述了一個算法運行時間和輸入規模之間的關係。一般用O表示,且不包括這個函數的低階和首項係數。若是一個算法的執行時間爲2n^2+5n+4,那麼該算法時間複雜度就能夠表示爲O(n^2)。segmentfault

通常的時間複雜度,由好到壞大概有這麼幾種O(1)、O(logn)、O(n)、O(nlogn)、O(n^k)(k>=2),通常狀況下,當算法時間複雜度高於O(n^2)時,性能就變得至關差,此時就該想辦法尋求更優的方案。數據結構


O(n^2)的情形

for(int i=0;i<n;i++){
        //code...
        for(int j=0;j<n;j++){
            //code...
        }
    }

O(nlogn)的情形

for(int i=0;i<n;i++){
        //code...
        for(int j=i;j<n;j++){
            //code...
        }
    }

O(logn)的情形

for(int i=0;i<n;i+=2){
        //code...
    }

O(1)的情形

//與n無關的有限次的表達式,例如賦值,簡單的運算等

二、空間複雜度

空間複雜度是一個算法執行過程當中所消耗的臨時空間的一個度量。同時間複雜度同樣,也不包括這個度量函數的低階項和首項係數。相對的應的,空間複雜度也有O(1)、O(logn)、O(n)、O(nlogn)、O(n^k)(k>=2)。函數

三、穩定性

在排序算法中,評估一個算法的優劣,除了時間複雜度和空間複雜度之外,還有一個衡量指標就是穩定性。在一個待排序的序列中,可能存在多個相等的項,通過排序後若是這些項的相對次序保持不變,則咱們說這個算法是穩定的,不然就是不穩定的。性能

研究穩定性的意義在於,若是算法是穩定的,那麼第一個元素排序的結果能夠被第二個等值的元素在排序時所用,也就是說能夠避免多餘的比較。code

四、總結

在介紹排序算法以前,本篇先對後面排序算法的基本概念說叨說叨,打下一個基礎鋪墊。排序

排序算法索引(待更)
Java數據結構與算法——桶排序
Java數據結構與算法——快速排序
碼字不易,如對您有幫助,歡迎點贊收藏打賞^_^索引

相關文章
相關標籤/搜索