1.選擇排序介紹
選擇排序分為三種,直接選擇排序、樹形選擇排序、堆排序。直接選擇排序和堆排序是不穩定排序,樹形選擇排序是穩定排序。在這裡介紹的是直接選擇排序。其他的後面再分析。
直接選擇排序演算法思想:第一趟從n個元素的資料序列中選出關鍵字最小/大的元素並放在最前/後位置,下一趟從n-1個元素中選出最小/大的元素並放在最前/後位置。以此類推,經過n-1趟完成排序。
2.選擇排序演算法分析
直接選擇排序的最好時間複雜度和最差時間複雜度都是o(n²),因為即使陣列一開始就是正序的,也需要將兩重迴圈進行完,平均時間複雜度也是o(n²)。空間複雜度為o(1),因為不占用多餘的空間。直接選擇排序是一種原地排序(in-place sort)並且穩定(stable sort)的排序演算法,優點是實現簡單,占用空間小,缺點是效率低,時間複雜度高,對於大規模的資料耗時長。
演算法步驟:
3.選擇排序演算法從實現到優化
v1.0
template void selectionsort2(t a, int len)
}swap(a[minindex], a[i]);
}}
4.選擇排序多種場景下的測試int main()
測試結果:
selectionsort : 0.424071s
selectionsort : 0.416928s
selectionsort : 0.410701s
根據結果表明,選擇排序是一種穩定的排序演算法,在隨機性很大和近乎有序,有序的情況下演算法的時間複雜度基本不變。但是這也是乙個劣勢,效率較差。
排序演算法 排序演算法之選擇排序
最近在學習排序演算法,就排序演算法中的四大經典排序 氣泡排序 快速排序 選擇排序 插入排序。會出一系列的講解排序演算法的部落格。今天繼快速排序之後整理一下選擇排序。選擇排序,就是從一列未排序的陣列中先選出最小 最大 的數,放在陣列的第一位,第一位原來的數字放在最小的原來的位置,再選出第二小的數,放在...
排序演算法之選擇排序 選擇排序 堆排序
直接選擇排序 如下 下面 是一次迴圈同時挑選出最大和最小數,並將其與左右交換 選擇排序 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 用於...