常見排序演算法 直接選擇排序

2021-09-24 15:27:28 字數 1985 閱讀 4851

直接選擇排序是常用選擇排序演算法之一,演算法簡單明瞭,但效能略差。

直接選擇排序演算法實現的思路比較簡單,利用雙層迴圈遍歷的方式篩選出最大(或最小)值,並放置到對應的位置即可。

陣列: a[n] = ;

第一次排序:將第乙個元素值作為最小元素,遍歷後面的陣列,如果當前元素小於最小元素,則交換他們,直到遍歷完成,最小元素被放到了第乙個元素的位置即a[0];

第二次排序:將第二個元素值作為最小元素,遍歷後面的陣列,如果當前元素小於最小元素,則交換他們,直到遍歷完成,第二小元素被放到了第二個元素的位置即a[1];

……第n-1次排序:a[n-2]為第二大的值,a[n-1]為最大值。

假設陣列為:a[6] = ;

初始:21,30,47,30,1,2

第一次排序:1,30,47,30,21,2

第二次排序:1,2,47,30,30,21

第三次排序:1,2,21,47,30,30

第四次排序:1,2,21,30,47,30

第五次排序:1,2,21,30,30,47

空間複雜度:o(1)

時間複雜度:o(n^2)

穩定性:不穩定,上例可知,排序過程中30和30的相對位置不穩定

優點:演算法簡單,容易實現

缺點:比較、交換次數比較多,效率低

優化:定義min,用來標記最小值的索引,遍歷完成後,若min發生變化,則交換兩個索引的值,否則不交換

package sort;

/** * created by fengjialong on 2019/6/20.

*/public class selectsort

public static void directselectsort() ;

int changetime = 0;

for (int i = 0; i < a.length; i++)

}sysout(a);

}system.out.println("優化前交換次數:" + changetime);

// 優化後

changetime = 0;

int b = ;

for (int i = 0; i < b.length; i++)

}if (i != min)

sysout(b);

}system.out.println("優化後交換次數:" + changetime);

}private static void sysout(int a)

system.out.println(stringbuilder.substring(0, stringbuilder.length() -

1).tostring());

}}

執行結果

1,30,47,30,21,2

1,2,47,30,30,21

1,2,21,47,30,30

1,2,21,30,47,30

1,2,21,30,30,47

1,2,21,30,30,47

優化前交換次數:7

1,30,47,30,21,2

1,2,47,30,21,30

1,2,21,30,47,30

1,2,21,30,47,30

1,2,21,30,30,47

1,2,21,30,30,47

優化後交換次數:4

常見排序演算法之直接選擇排序

直接選擇排序 straight select sorting 也是一種簡單的排序方法,它的基本思想是 第一次從r 0 r n 1 中選取最小值,與r 0 交換,第二次從r 1 r n 1 中選取最小值,與r 1 交換,第i次從r i 1 r n 1 中選取最小值,與r i 1 交換,第n 1次從r ...

排序演算法(直接選擇排序)

為什麼我們要叫直接選擇排序呢?在最開始的時候,待排序區間是整個陣列,從區間選乙個最小的與區間第乙個交換位置,然後將待排序區間從第二個開始,繼續以上操作,直至待排序區間長度為0 我們還是以為例 初始 3 5 7 9 8 6 2 1 4 0 第一趟 05 7 9 8 6 2 1 4 3 第二趟 0 17...

排序演算法 直接選擇排序

選擇排序的基本思想是 每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放入已排序數列的最後,直到全部記錄排序完畢。直接選擇排序是一種簡單直觀的排序演算法。它的工作原理 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列...