八大排序之選擇排序

2022-08-25 16:36:26 字數 1617 閱讀 2260

一、基本思想

每次從待排記錄中選出最小值放在有序記錄的末尾。等每乙個待排元素均被選出後,整個記錄排序就完成了。

二、實現步驟

這裡採用雙向選擇排序,每次從待排記錄中選出最大值和最小值,最大值和待排記錄的最後一位交換位置,最小值和待排記錄的第一位交換位置。

注意,交換位置分如下情況:

1)最大值在最左邊,最小值在最右邊。直接將最大值最小值相互交換即可。

2)最大值在最左邊,最小值在中間。必須先將最大值與最後一位交換,再將最小值與第一位交換。否則會出錯,不信就試試。

3)最大值在中間,最小值在中間。隨意誰先交換都行。

4)最小值在最右邊,最大值在中間。必須先將最小值與第一位交換,再將最大值與最後一位交換。

5)最小值在最右邊,最大值在最左邊。不用交換。

對於上述5種情況,其實可以簡化成如下情況來做。

一、如果max在最左邊,

如果min在最右邊,兩者直接交換

否則,先交換max,再交換min

二、其他情況一律先交換min,再交換max。

max在最左,min在最右這種情況,由於兩次交換,等同於沒交換,所以不會出現錯誤。

三、實現**

測試工具類 點選這裡

package

sort;

import sort.util.*;

/*選擇排序思路:

選擇待排記錄中最小值,放在左邊

雙向選擇,一次遍歷中選出最大值放在右邊,選出最小值放在左邊

時間複雜度:o(n2)

空間複雜度:o(1)

穩定性: 穩定

*/public

class selectsort implements

isort

if(a[j] < a[minid])

}//根據maxid的位置走不同的交換順序

int t = 0;

if(maxid ==i)else

}else}}

public

static

void

main(string args)

}

測試結果:

四、總結分析

時間複雜度:o(n2)

空間複雜度:o(1)

選擇排序是一種比較直觀易懂的排序演算法,時間複雜度不理想,但幾乎不佔空間。下篇將展示選擇排序的改進演算法 ----- 堆排序。

八大排序之選擇排序

個人部落格 建議先看排序綜述,傳送門 資料結構與演算法系列之一 八大排序綜述。選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末...

八大排序之選擇排序

思想 每一趟都從待排序的數列中選擇乙個最大 最小 的,放在數列的最後乙個位置 或起始位置 直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法。例 9 5 3 4 6 2 8 1 7 0 if maxpos len 1 i 如果最大的元素就是在最後位置,就不用交換 int main int le...

八大排序之選擇排序

每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法。每次掃瞄找到最小,到掃瞄到末尾,將本次掃瞄的最小放到左邊 注意與氣泡排序相比較...