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

2021-10-13 21:59:39 字數 1674 閱讀 8421

排序演算法是最基本最常用的演算法,不同的排序演算法在不同的場景或應用中會有不同的表現,我們需要對各種排序演算法熟練才能將它們應用到實際當中,才能更好地發揮它們的優勢。今天,來總結下各種排序演算法。

下面這個**總結了各種排序演算法的複雜度與穩定性:

各種排序演算法複雜度比較.png

氣泡排序

氣泡排序可謂是最經典的排序演算法了,它是基於比較的排序演算法,時間複雜度為o(n^2),其優點是實現簡單,n較小時效能較好。

void bubble_sort(int arr, int len) } }}
選擇排序

void select_sort(int arr, int len) if (index != i)  }}
插入排序

void insert_sort(int arr, int len) arr[j + 1] = k; }}
快速排序

void quick_sort(int arr, int left, int right) arr[i] = target; quick_sort(arr, left, i - 1); quick_sort(arr, i + 1, right); }}
歸併排序

void merge(int arr, int temp_arr, int start_index, int mid_index, int end_index) while (i < mid_index + 1)  while (j < end_index + 1) temp_arr[k++] = arr[j++]; for (i = 0, j = start_index; j < end_index + 1; i ++, j ++) arr[j] = temp_arr[i];}void merge_sort(int arr, int temp_arr, int start_index, int end_index)}
堆排序

二叉堆二叉堆是完全二叉樹或者近似完全二叉樹,滿足兩個特性

當父結點的鍵值總是大於或等於任何乙個子節點的鍵值時為最大堆。當父結點的鍵值總是小於或等於任何乙個子節點的鍵值時為最小堆。一般二叉樹簡稱為堆。

堆的儲存

一般都是陣列來儲存堆,i結點的父結點下標就為(i – 1) / 2。它的左右子結點下標分別為2 * i + 1和2 * i + 2。如第0個結點左右子結點下標分別為1和2。儲存結構如圖所示:

堆結構.png

堆排序原理

堆排序的時間複雜度為o(nlogn)

/** * 將陣列arr構建大根堆 * @param arr 待調整的陣列 * @param i 待調整的陣列元素的下標 * @param len 陣列的長度 */void heap_adjust(int arr, int i, int len) else break; }}/** * 堆排序演算法 */void heap_sort(int arr, int len) for (i = len - 1; i > 0; i--) }

php陣列進行打亂,重新排列

最近做專案遇到這樣乙個問題,是關於乙個考試的專案 要求a b c d的答案不能始終在一樣的位置,所以就要進行重新組裝隨機出來了。黏上 header content type text html charset utf 8 array choice 直角三角形 銳角三角形 鈍角三角形 天角三角形 fu...

重新排列陣列 1470

題目 給你乙個陣列 nums 陣列中有 2n 個元素,按 x1,x2,xn,y1,y2,yn 的格式排列。請你將陣列按 x1,y1,x2,y2,xn,yn 格式重新排列,返回重排後的陣列。示例 1 輸入 nums 2,5,1,3,4,7 n 3 輸出 2,3,5,4,1,7 解釋 由於 x1 2,x...

1470 重新排列陣列

1470.重新排列陣列 給你乙個陣列 nums 陣列中有 2n 個元素,按 x1,x2,xn,y1,y2,yn 的格式排列。請你將陣列按 x1,y1,x2,y2,xn,yn 格式重新排列,返回重排後的陣列。示例 1 輸入 nums 2,5,1,3,4,7 n 3 輸出 2,3,5,4,1,7 解釋 ...