选择排序思想:设数组的长度为N(4,3,1,5,2)
1.从n个元素的数据序列中选出关键字最小/大的元素并放在最前/后位置
2.下一次从n-1个元素中选出最小/大的元素并放在最前/后位置
3.以此类推,经过n-1次完成排序。
小结:平均时间复杂度O(n^2);最好情况O(n^2);最坏情况O(n^2);空间复杂度O(1);占用内存,不占用额外内存;稳定性:不稳定
//通常解法
public static void choose_normal(int[] arra) {
for (int i = 0; i < arra.length - 1; i++) { ----->排完一次后顺序为1,3,4,5,2
int minIndex = i;
for (int j = i + 1; j < arra.length; j++) {
if (arra[minIndex] > arra[j]) {
minIndex = j;
}
}
int temp = arra[i];
arra[i] = arra[minIndex];
arra[minIndex] = temp;
}
for (int aa : arra) {
System.out.println(aa);
}
}
//相对优选解法
public static void choose_fashion(int[] arra) {
for (int i = 0; i < arra.length; i++) {
int minIndex = i;
for (int j = i + 1; j < arra.length; j++) {
minIndex = arra[j] < arra[minIndex] ? j : minIndex;
}
swap(arra, i, minIndex);
}
}
public static void swap(int[] arra, int i, int j) {
arra[i] = arra[i] ^ arra[j];
arra[j] = arra[i] ^ arra[j];
arra[i] = arra[i] ^ arra[j];
}
//测试用例
public static void main(String[] args) {
int[] arra = {5, 7, 9, 3, 2, 6, 4, 1, 0, 8};
choose_normal(arra);
choose_fashion(arra);
}
算法[1]---排序---选择排序
最新推荐文章于 2024-08-19 21:46:47 发布