十大经典排序算法之选择排序及其优化
生活随笔
收集整理的這篇文章主要介紹了
十大经典排序算法之选择排序及其优化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、簡單選擇排序
1.基本思想:
在長度為N的無序數組中,第一次遍歷n-1個數,找到最小的數值與第一個元素交換;
第二次遍歷n-2個數,找到最小的數值與第二個元素交換;
。。。
第n-1次遍歷,找到最小的數值與第n-1個元素交換,排序完成。
2.過程
3.代碼
4.復雜度分析
選擇排序的交換次數介于0~(n-1)之間;
比較次數為n(n-1)/2之間
交換次數遠遠小于冒泡排序;由于cpu計算時,交換時間大于比較時間,所以當n較小時,選擇排序優于冒泡排序。
平均時間復雜度:O(n^2)
5.穩定性分析
當兩個相同的數據相鄰時,如果一個更小的數據比這兩個數據要小,那么就會與這兩個數據的第一個進行交換;那么這就破壞了原先數據的有序性,所以不穩定。
二、優化
1.思路
使用兩個變量,分別指向數組的頭尾;每次遍歷數組過程中,找到無序表中的最大值與最小值進行交換
2.代碼
public static void selectSort2(int arr[]) {int left = 0;int right = arr.length - 1;while (left < right) {int max = right;int min = left;for (int j = left; j <= right; j++) {if (arr[max] < arr[j]) {max = j;}if (arr[min] > arr[j]) {min = j;}}if (min != left) {swap(arr, min, left);}if (max == left) {max = min;}if (max != right) {swap(arr, max, right);}left++;right--;}}3.優化后的復雜度分析
減少了交換次數,交換次數為n/2
平均時間復雜度為O(n^2)
依舊不穩定
總結
以上是生活随笔為你收集整理的十大经典排序算法之选择排序及其优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十大经典排序算法之希尔排序及其优化
- 下一篇: 十大经典排序算法之快速排序及其优化