您的位置:首页 > 其它

选择排序

2019-08-30 18:28 1616 查看

选择排序

分为已排区间(在左边)和未排区间(在右边)。每次从未排区间找出一个 min ,放到已排区间的末尾。

0-N-1 遍历一次找出最小值,放在 0 位上。

1 到 N-1 上遍历一次,找出最小值,放在 1 位置上。直到排好序。

时间复杂度是 O(N2),空间复杂度是 O(1)

 

思路:先思考临界条件,两层 for 循环(设置 i、j 两个变量,j ==i+1),寻找 min (三目交换符),调用交换方法。写交换方法。

package suanfa;

public class xuanzhe {
public static void selectSort(int[] arr) {
if (arr == null || arr.length < 2) {     //临界
return;
}

for (int i = 0; i < arr.length - 1; i++) {    //两层for循环,i,j是 第 0 位,第 1 位。
int minIndex = i;							//假设 第0 位的为 min
for (int j = i + 1; j < arr.length; j++) {
minIndex = arr[j] < arr[i] ? j : minIndex;   //j位置小于i,则min==j,否则原地不动
}
swap(arr, i, minIndex);
}
}

public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}

public static void main(String[] args) {
int[] arr = { 1, 8, 56, 984, 14, -84 };
System.out.println(java.util.Arrays.toString(arr));
selectSort(arr);
System.out.println(java.util.Arrays.toString(arr));
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: