常用算法Java实现之选择排序

时间:2021-05-02 11:12:33
  选择排序算法在每一步中选取最小值来重新排序,通过选择和交换来实现排序。   具体流程如下:   1、首先从原数组中选择最小的1个数据,将其置于第一个位置。   2、然后从剩下的数据中再选择其中最小的一个数据,并将其置于原数组的第二个位置。   3、不断重复选择和交换的过程,直至最后排序完成。   假如有初始数据:25  11  45  26  12  78。   1、第一轮排序,从原数组中选择出最小的数据,并将其置于第一个位置。第一轮排序后,顺序为:[11, 25, 45, 26, 12, 78]。   2、第二轮排序,从剩下的数据中再选择出其中最小的一个数据,并将其置于原数组的第二个位置。第二轮排序后,顺序为:[11, 12, 45, 26, 25, 78]。   .......    3、最终顺序为:[11, 12, 25, 26, 45, 78]。     选择排序是不稳定的排序。选择排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1) (选择排序只需要一个额外空间用于数组元素交换)。   Java 代码实现如下:(https://github.com/xbk417/algorithm
public void sort(int[] arr) {
int tmp;
// 第n轮排序过程中的较小数的下标
int small;

for(int i = 0; i < arr.length - 1; i++) {
small
= i;
// 找出最小的数的下标
for(int j = i + 1; j < arr.length; j++) {
if(arr[j] < arr[small]) {
small
= j;
}
}
// 交换
if(small != i) {
tmp
= arr[i];
arr[i]
= arr[small];
arr[small]
= tmp;
}
System.out.println(i
+ ":" + Arrays.toString(arr));
}
}