3、选择排序
题目思路:
选择排序与冒泡排序类似:冒泡排序是将最大的值依次冒泡到最后面,选择排序是将最小的值依次交换到最前面。选择排序就是选择最小值!
1、第一步:对于第一个位置,即从第一个位置开始,找到后面的最小值,与第一个位置的值交换;
2、第二步:对于第二个位置,即从第二个位置开始,找到后面的最小值,与第二个位置交换;
3、第三步:接下来依次进行,找到后面的最小值,与当前位置的值交换,直至遍历结束。
排序复杂度:
时间复杂度: o(n^2)
空间复杂度: o(1)
排序稳定性:
假如数组元素为 […,5,5,1…],则选择排序后,选出来最小值1要与第一个5进行交换,交换后为 […,1,5,5…],则之前两相等元素的顺序发生了变化,故选择排序不具有稳定性。
代码实现:
/**
* Created by Zhaoyang Ge on 2018/8/26.
*/
public static int[] selectionSort(int[] arr) {
if (arr == null || arr.length < 2) {
return arr;
}
for (int i = 0; i < arr.length; i++) {
int minIndex = i;
for (int j = i; j < arr.length; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
}
swap(arr, i, minIndex);
}
return arr;
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}