修煉內功 資料結構與演算法10 選擇排序

2021-09-05 07:23:13 字數 713 閱讀 9694

選擇排序演算法的實現思路有點類似插入排序

也分已排序區間和未排序區間

但是選擇排序每次會從未排序區間中找到最小的元素,將其放到已排序區間的末尾

<?php

/*** 選擇排序演算法實現

*/function selection_sort($nums)

for ($i = 0; $i < count($nums); $i++)

}if ($min != $i)

}return $nums;

}$nums = [4, 5, 6, 3, 2, 1];

$nums = selection_sort($nums);

print_r($nums);

很顯然,選擇排序的時間複雜度也是 o(n^2)

由於不涉及額外的儲存空間,所以是原地排序

由於涉及非相鄰元素的位置交換,所以是不穩定的排序演算法

綜合比較前面介紹的三個排序演算法,時間複雜度都是一樣的,也都是原地排序,但是選擇排序是不穩定的排序演算法,此外,插入排序和氣泡排序相比較,我們在將插入排序的時候講到,插入排序只需要一條語句,而氣泡排序需要三條,在同等條件下,或者資料量很大的情況下,插入排序效能是要由於氣泡排序的,所以綜合比較下來,三者的優先順序是插入排序 > 氣泡排序 >> 選擇排序。但是三者的時間複雜度都是 o(n^2),資料量很大的情況下效能表現並不是很理想,那有沒有效能更好的排序演算法呢?當然有,我們明天來揭曉。

修煉內功 資料結構與演算法6 佇列

通過 php 陣列實現的佇列 class queue 入隊 public function enqueue value array push this queue,value 出隊 public function dequeue array shift 將 array 的第乙個單元移出並作為結果返回...

修煉內功 資料結構與演算法9 插入排序

插入排序的原理我們將陣列中的資料分為兩個區間,已排序區間和未排序區間。初始已排序區間只有乙個元素,就是陣列的第乙個元素。插入演算法的核心思想是取未排序區間中的元素,在已排序區間中找到合適的插入位置將其插入,並保證已排序區間資料一直有序。重複這個過程,直到未排序區間中元素為空,演算法結束。插入排序實現...

修煉內功 資料結構與演算法11 歸併排序

所謂歸併排序 指的是如果要排序乙個陣列 我們先把陣列從中間分成前後兩部分,然後對前後兩部分分別排序,再將排好序的兩部分合併在一起,這樣整個陣列就都有序了 歸併排序使用了分治思想 分治,顧名思義,就是分而治之,將乙個大問題分解成小的子問題來解決 歸併排序就是通過遞迴來實現的 這個遞迴的公式是每次都將傳...