简介
第一次从数组中查最小的元素,放到数组起始位置,然后从剩余的元素中找到最小的,放到数组有序部分末尾,依次这样查找排序,直至结束。
题目
给定一组数据进行选择排序,以 {9, 3, 4, 2, 0, 1, 5, 8}为例。
排序过程
时间复杂度O(N²)分析
第一次排序,需要比较N-1次;
第二次排序,需要比较N-2次;
......
第N-1次排序,需要比较1次;
比较次数=(N-1)+(N-2)+...+1=((1+ N-1)*(N-1))/2=N²/2 + N/2
所以时间复杂度为:O(N²)
代码
public class SortUtils {
public void selectionSort(int[] arr) {
if(arr == null || arr.length < 2) {
return;
}
for(int i = 0, len = arr.length - 1; i < len; i++) {
int minIndex = i;
for(int j = i + 1; j < len + 1; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
}
swap(arr, minIndex, i);
}
}
public void swap(int[] arr, int i, int j) {
if(i == j) {
return;
}
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。