基於整型陣列的幾種基本的排序演算法

2022-09-22 03:48:11 字數 2034 閱讀 5250

一、選擇排序(排成從小到大的順序)(不穩定,時間複雜度:最差、平均都是o(n2))

1.演算法思路:

①找出陣列中最小的數與第乙個數進行交換;

②找出陣列中第二小的數與第二個數進行交換

③依此類推,直到陣列排序完畢.

2.例子:

void selectsort(int arr,int length) }

}}三、直接插入排序(排成從小到大的順序)(穩定,時間複雜度:最差、平均都是o(n

2)、最好:o(n))

1.演算法思路:

①從第二個元素開始執行第一遍「插入」演算法,將當前元素與前面(已經排好序)的元素依次進行比較

②當前元素是從後往前比較前面已經排好序的元素的,遇到比自己大的元素時與之交換,遇到比自己小的元素或到陣列起始位置時停留在原位置不動,算是「插入」結束

③接著第三個元素開始執行第二遍"插入"演算法,依次類推,陣列中所有元素都"插入"完畢也就排好序了

2.例子:

void insertsort(int arr,int length) }

}}四、二分插入排序(穩定,時間複雜度:最差、平均都是o(n

2)、最好:o(nlogn))

1.演算法思路:

①.從陣列第二個元素開始執行演算法,將當前元素作為待插元素,折半查詢待插元素在前面已經排好的序列中應該插入的位置index

②.將應該插入的位置index到待插元素當前位置前一位這一段元素全部後移一位

③.將待插元素插入到待插位置

④.當所有元素插入完畢時,即可完成排序。

2.例子:

void middlesort(int arr,int length)

arr[low]=key;}}

五、希爾排序(不穩定,時間複雜度:o(nlogn))

1.演算法思路:

①希爾排序本質上是直接插入排序的變種,直接插入排序是相鄰元素的交換移動,這樣做效率低,希爾排序進行交換的元素的間隔為dl(dl>=1),這個dl叫做增量

②給增量乙個初始值,將陣列劃分為dl個字陣列,所有距離為dl的元素互為同一子陣列,用直接插入法排序所有子陣列

③變小增量值,重複上一操作

④直到增量值為1,希爾排序跟直接插入排序操作一樣(只不過這時,陣列有很多段是連續的),排序完畢 

2.例子:

void shellpass(int arr,int length,int dl)}}

}void int shellsort(int arr,int lenth,int n)

while(dl>1);

}六、快速排序(不穩定,時間複雜度:最差o(n

2)、平均o(nlogn))

1.演算法思路:

①快排採用的是分治的策略,把陣列中乙個元素作為基數,將陣列分成左右兩字段,左邊所有元素均小於等於該基數,右邊所有元素均大於等於該基數,遞迴操作字段,到字段長度為1時,即可排好序。

②將待排序列第一項作為該次排序的基數,有兩個指標left、right,初始值分別為待排序列最左端和最右端;

③首先right向左邊移動(不越過left,這是因為此時left指向的位置要存入待轉移的元素,要保證right不能超過該位置),找到乙個小於基數的元素的位置,將該元素轉移到left指向的位置,同時left後移一位;

④然後left向右邊移動(不越過right,這是因為此時right指向的位置存入待轉移的元素,要保證left不能超過該位置),找到乙個大於基數的元素的位置,將該元素轉移到right指向的位置,同時right前移一位;

⑤待left和right重逢時(left==right),left所指向的位置就是該次待排序列的分割點,將基數存入left位置,left左邊的元素均小於等於基數,右邊均大於等於基數

⑥遞迴操作被分割出來的兩個子串行序列,直到序列長度等於1時,排序結束

2.例子:

void quicksort(int arr ,int m,int n)

if(leftwhile((leftif(left}arr[left]=base;

quicksort(arr,m,left-1);

quicksort(arr,left+1,n);

}

陣列的幾種排序

氣泡排序 這裡的原理就是迴圈便利陣列,內層迴圈遍歷陣列,將裡面的第乙個元素取出來和第二個陣列比較,然後替換位置,第二個和第三個比較,比完之後最後乙個元素一定是最小的,那麼外層的第二次迴圈減掉一次 function bubblesort array return array 使用es6進行簡化 解構賦...

php 陣列排序鍵值重新排列 總結幾種排序演算法

排序演算法是最基本最常用的演算法,不同的排序演算法在不同的場景或應用中會有不同的表現,我們需要對各種排序演算法熟練才能將它們應用到實際當中,才能更好地發揮它們的優勢。今天,來總結下各種排序演算法。下面這個 總結了各種排序演算法的複雜度與穩定性 各種排序演算法複雜度比較.png 氣泡排序 氣泡排序可謂...

幾種基本的排序演算法

1.氣泡排序 氣泡排序的目標就是通過第一次迴圈將最大 最小 的數找出來,第二次迴圈將次大 次小 的數找出來.氣泡排序在最壞情況下的時間複雜度為o n 2 平均時間複雜度 o n 2 最好情況下的時間複雜度是 o n 演算法穩定。氣泡排序 public class bunnlesort public ...