幾種常見的排序演算法總結

2021-08-18 07:47:46 字數 2157 閱讀 5163

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量資料的處理方面。乙個優秀的演算法可以節省大量的資源。在各個領域中考慮到資料的各種限制和規範,要得到乙個符合實際的優秀演算法,得經過大量的推理和分析。

常見的排序演算法可以分為以下幾類,分別是:氣泡排序,選擇排序,插入排序,快速排序,合併排序,堆排序,希爾排序以及多路歸併排序。

1.氣泡排序:

該排序演算法是所有排序演算法中最基本的一種排序演算法,其思想主要是通過與相鄰元素進行比較,交換。重複多次來實現排序。是一種穩定的排序演算法,時間複雜度為o(n*n)。

基本步驟如下:

(1)對陣列的各資料進行依次的比較。

(2)如果前面資料大於(小於)後面資料則交換這兩個資料,經過第一輪的多次比較之後,便可以將該陣列中的最小(最大)資料排好。

(3)再利用同樣的方法將剩下的資料逐個進行比較,最後便可以按照從小到大(從大到小)的順序排好陣列中的各資料順序。

示例**如下:

#include using namespace std;

#include #include //交換函式

void swap(int *a,int *b)

//氣泡排序演算法

void bubblesort(int a,int n)

} }}int main()

//選擇排序演算法

void selectsort(int a,int n)

a[j+1]=temp;

} }int main()

//劃分函式

int partition(int a,int low,int high)

if(i>n;

int *a=new int[n];

srand(time(null));

for(int i=0;i6.堆排序演算法:

堆排序演算法是基於選擇排序的思想,利用堆結構和二叉樹的一些性質來完成資料的排序。該排序演算法不是一種穩定的排序演算法,時間複雜度為o(nlogn)。

相關概念:

堆結構:堆結構是一種樹結構,準確點來說是乙個完全二叉樹。在這個樹中每乙個結點對應原始資料的乙個記錄,並且每個結點都應該滿足以下條件:

①如果按照從小到大的順序排序,要求非葉子結點的資料要大於或等於其左右子結點的資料。

②如果按照從大到小的順序排序,要求非葉子結點的資料要小於或等於其左右子結點的資料。

基本步驟如下:

如何構造乙個堆結構?

假定乙個非葉子結點ai,其左子樹和右子樹均已進行篩運算(即左右子樹均已構成堆結構)

①比較ai的左子樹和右子樹的最大值,將最大值放在aj中。

②將ai的資料與aj的資料進行比較,如果ai大於等於aj,表示以ai為根的子樹已構成堆結構,可以終止篩運算。

③如果ai小於aj,則ai與aj互換位置

④經過第③步後,可能會破壞以ai為根的堆,因為此時ai的值為原來的aj。下面以aj為根重複前面的步驟,直到滿足堆結構的定義,也就是父結點資料大於子結點。這樣,以aj為根的子樹就會被調整為乙個堆結構。

示例**如下:

#include using namespace std;

#include #include //交換函式

void swap(int *a,int *b)

//堆調整函式

void ajustheap(int a,int father,int n)

} //堆排序函式

void heapsort(int a,int n) }

int main()

else

}//將陣列中剩下的元素複製到陣列b中去(此時無論是a[low,mid]有剩下元素還是a[mid+1,high]陣列有剩下元素,它們都是有序的,直接拷貝進b陣列即可)

while(i<=mid)

while(j<=high)

for(i=low,k=0;i<=high;i++)

}//合併排序函式

void mergesort(int a,int low,int high)

{ if(low>n;

int *a=new int[n];

srand(time(null));

for(int i=0;i

js的幾種常見的演算法排序總結

思想 比較相鄰的兩個元素的大小,順序如果相反的話則進行交換,這樣的話每次迴圈都可以將最小的或者最大的元素放到後面,最終達到排序的效果 可公升序可降序 實現var array 3 4,1 5,2 45,1 23 function bubblesort arr return arr console.lo...

幾種常見排序演算法

幾種常見排序演算法 1氣泡排序 bubble sort 氣泡排序思路 將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素 第一輪結束後,序列最後乙個元素一定是當前序列的最大值 對序列當中剩下的n 1個元素再次執行步驟1。3.對於長度為n的序列,一共需要執行n 1輪比較 實現 for i...

幾種常見排序演算法

1氣泡排序 bubble sort 氣泡排序思路 1.將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素 第一輪結束後,序列最後乙個元素一定是當前序列的最大值 2.對序列當中剩下的n 1個元素再次執行步驟1。3.對於長度為n的序列,一共需要執行n 1輪比較 實現 for i 0 i n...