排序演算法之選擇排序

2021-07-22 16:32:13 字數 1055 閱讀 7598

先看一下下面這張圖

下面分析選擇排序:

選擇排序第一次從頭遍歷n個元素,找到最大(最小)的元素並放到最後。

第二次從頭遍歷n-1個元素,同樣找到最大的元素,放到n-2(即第n-1個元素)的位置。

以此下去,直到只剩下第乙個元素,排序結束。

選擇排序簡單粗暴,實現起來比較容易,外層迴圈控制已經排好序的個數,內層迴圈遍歷前n個元素找到最大元素放到n-1位置。

也正是因為它的簡單粗暴,它的時間複雜度比較高,外層迴圈需要o(n),內層迴圈也要o(n),所以時間複雜度為o(n2)。無論初始陣列是否有序,內層迴圈都需要遍歷n個元素,所以其最好最壞平均情況下的時間複雜度都是o(n2)。

由於不需要額外的輔助空間,其空間複雜度為o(1),即常量複雜度。

選擇排序內層迴圈開始時取第乙個元素為最大元素,後續元素如果有比其大的則替換它,找到最大元素後與最後乙個元素進行交換,這樣最後乙個元素就被提到前面來了,可能會破壞穩定性(如855,把8和第二個5交換後,第二個5就被交換到第乙個5前面了),所以這個元素有可能被放到本來在其後面的跟其一樣大的元素後面,所以選擇排序是不穩定的。

as3**:

/**

* 選擇排序

* 外層迴圈控制當前已排好多少個元素

* 內層迴圈遍歷還未排的元素

*/private function selectsort(arr:array):void

}if(inx!=arr.length-1-i)

}} /**

* 選擇排序

* 外層迴圈控制從哪個元素開始遍歷

* 內層迴圈遍歷這些元素並把最小元素放到最前

*/private function selectsort2(arr:array):void

} //找到的元素與最後乙個元素交換

if (inx != n - i - 1)}}

總結,選擇排序時間複雜度為o(n2),空間複雜度為o(1),不具備穩定性。

排序演算法 排序演算法之選擇排序

最近在學習排序演算法,就排序演算法中的四大經典排序 氣泡排序 快速排序 選擇排序 插入排序。會出一系列的講解排序演算法的部落格。今天繼快速排序之後整理一下選擇排序。選擇排序,就是從一列未排序的陣列中先選出最小 最大 的數,放在陣列的第一位,第一位原來的數字放在最小的原來的位置,再選出第二小的數,放在...

排序演算法之選擇排序 選擇排序 堆排序

直接選擇排序 如下 下面 是一次迴圈同時挑選出最大和最小數,並將其與左右交換 選擇排序 void selectionsort int a,int len swap a min a left 如果最大數的下標在為left,證明要交換的最大數已經被 換到min小標所表示的位置,只需要將right和min...

排序演算法之選擇排序

選擇排序 在乙個長度為n的無序陣列中,在第一趟遍歷n個資料,找出其中最小的數值與第乙個元素交換,第二趟遍歷剩下的n 1個資料,找出其中最小的數值與第二個元素交換.第n 1趟遍歷剩下的2個資料,找出其中最小的數值與第n 1個元素交換,至此選擇排序完成。平均時間複雜度 o n2 空間複雜度 o 1 用於...