每一次循环选择一个最小的数放到数组前面,每轮外循环只交换一次,需记录数值最小的下标
弊端:不稳定性
时间复杂度,空间复杂度
自己写的,内层循环选择了从后往前遍历。看网上大部分是从前往后遍历,于是又写了一个
public static void xuanze(int[] a) {
int minIndex;
int tem;
//外层循环次数
for (int i = 0; i < a.length - 1; i++) {
//每次外循环都假设最小值就是数组最后的那个元素
minIndex = a.length - 1;
//内循环从后往前遍历
for (int j = a.length - 1; j > i; j--) {
if (a[minIndex]>a[j-1]) {
//当满足条件时,重新记录更小数值的下标
minIndex = j - 1;
}
}
tem = a[minIndex];
a[minIndex] = a[i];
a[i] = tem;
}
}
内层循环从前外后遍历
public static void xuanze1(int[] a) {
int minIndex;
int tem;
//外层循环次数
for (int i = 0; i < a.length - 1; i++) {
//假设外循环每次i就是最小值下标,i前面下标的数值都是有序的
minIndex = i;
for (int j = i; j < a.length - 1; j++) {
if (a[minIndex]>a[j+1]) {
minIndex = j+1;
}
}
tem = a[minIndex];
a[minIndex] = a[i];
a[i] = tem;
}
}