public class xuanze {
//选择排序
public static void selectSort(int[] nums ) {
//先处理边界条件:为空或 连2个数都不够,不需要排
if(nums == null || nums.length <2){
return;
}
int n = nums.length;
// 外for:控制无序区间的范围
// 0---n-1
// 1----n-1
// 2-----n-1
for (int i = 0; i < n; i++) {
//内for:找到每次无序区间里的最小值,无序区间:【i+1,n)
//因为i位置的已经考虑到了,已假设为最小值,即假设i位置有序了,所以,j从i+1出发。这样也避免了几次自己和自己比较
//j从i出发也能实现排序,但比较次数多了
int minValIndex = i; //每次都假设头上(左边)的是最小值,记录最小值的下标
//j从i+1出发,也就是i往后的所有东西都看一遍
for (int j = i+1; j < n; j++) {
//是否更新最小值下标。其实就是if的简写
//一个是更新,一个是维持不变
minValIndex= nums[j] < nums[minValIndex] ? j : minValIndex;
}
//找到后,交换
swap(nums,i,minValIndex);
}
}
public static void swap(int[] nums ,int aIndex,int bIndex){
int tmp = nums[aIndex];
nums[aIndex] = nums[bIndex];
nums[bIndex] = tmp;
}
public static void printArr(int[] nums){
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+" ");
}
System.out.println();
}
@Test
public void t1(){
int[] nums = {9,4,2,5,7,0,-1,-44};
selectSort(nums);
printArr(nums);
}
}
选择排序-java
最新推荐文章于 2024-07-24 17:27:32 发布