一、選擇排序(排成從小到大的順序)(不穩定,時間複雜度:最差、平均都是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 ...