排序算法學習--內部排序(一)

1. 什麼是排序?算法

排序是把無序的數據整理爲有序的數據。函數

2. 排序種類劃分?優化

根據排序中,數據的移動方式劃分爲:直接移動和邏輯移動兩種。排序

根據排序排序中所使用的存儲器劃分爲:內部排序和外部排序。內存

內部排序就是數據操做只須要藉助內存來完成。原理

外部排序就是須要藉助外部存儲設備,如硬盤,u盤,軟盤等等。適用於數據量龐大的場景。二叉樹

3.排序算法優劣劃分依據?循環

(1)是否穩定。也就是考慮在存在數據相等時,排序後是否會引發相等數據位置的不肯定。能夠肯定相對位置的就是穩定排序。反之,就是不穩定排序。遍歷

(2)時間複雜度。用於衡量程序運行時間的函數。技巧

(3)空間複雜度。用於衡量排序所用空間的函數。

4.經常使用的內部排序算法有哪些?

(1)冒泡排序。

冒泡排序如同氣泡,自下而上浮出水面。

原理:將每個元素和其餘元素相比較,若是這個元素小於其餘元素,就進行調換位置。所以須要 (n-1)+(n-2)+...+(n-(n-1))=1+2+3+...+(n-1)=(n-1)n/2

所以時間複雜度爲O(n^2),而且是穩定排序。排序過程只須要一個額外的空間。

另外,冒泡排序在其中一個元素沒有發生交換位置時,就已是一個有序的數據。循環能夠提早結束。是一個優化的方案。

(2)選擇排序

選擇排序是遍歷數據將每一個最小的元素變換位置,而達到最終的有序。有點兒相似於冒泡排序,可是選擇排序不會進行頻繁的位置交換,只會從第一個元素開始,查找最小的元素,次小的等等,最多隻會有n-1次交換位置。

從執行次數來說和冒泡排序同樣。時間複雜度也是O(n^2)。

注意:選擇排序不是穩定排序。由於若是有和位置0相等的其餘元素,交換爲以後,相對順序會發生改變,所以不是穩定的。

空間上只須要1個額外空間。

(3)插入排序

就是依次取一個元素,直至取完,將每個元素插入,直至最後一個元素。

須要的執行次數爲:1+2+...+(n-1)= n(n-1)/2,時間複雜度爲O(n^2),而且是穩定排序,須要空間爲一個額外的空間。

會進行大量的數據移動,建議在鏈表上使用。

(4)希爾排序

排序原理:分組拆(注意:相反的能夠分組合,另外一種排序算法)

就是先分紅幾個區塊,再減少間距,直至間距爲1,進行最後依次排序,完成!!!

時間複雜度爲O(n^3/2),穩定排序,只須要一個額外的空間。

(5)合併排序

由小集合到大集合的過程,就至關因而分多個隊伍,各自排好本身的順序,再合到一塊兒。

時間複雜度爲O(n*logn),穩定排序,須要一個與文件大小相同的空間。

(6)快速排序法

又叫作分割交換排序法,是目前公認最佳的排序法。

原理:固定一個基準點,肯定一個基準點,使左邊的數據都小於右邊的數據,各自再進行排序。

時間複雜度爲O(nlog2N),不是穩定排序法,由於會進行位置交換。空間複雜度最差爲O(n)

,最佳狀況爲O(log2N)

(7)堆積排序法

運用二叉樹的技巧,樹根大於等於左右子樹,將數據轉換爲堆積樹。而後依次從最大的樹根處移除數據。

時間複雜度爲O(nlogN),不是穩定排序,須要一個額外的存儲空間。

相關文章
相關標籤/搜索