1、实现思路:
从 待排序的数据中 选择最小(或最大)的 放在首位--->从除首位数据中 选择最小(或最大)放在 除首位的首位,以此类推,直至 未排序的为0;
2、算法分析:
2.1、不稳定 排序;
2.2、
比较趟数: 0至(n-1);
比较次数: a=(n-1)+(n-2)+...2+1 => A:a=(n-1)+(n-2)+...2+1 B: a=1+2+...+(n-2)+(n-1) 【n-1个数】=> A+B => 2a=n+...n =>a=n(n-1)/2;
赋值次数: int temp=arr[minIndex]; arr[minIndex]=arr[i]; arr[i]=temp; 0至3(n-1);
2.3、时间复杂度: O(n^2);
3、
public static void main(String[] args) {
int[] arr=new int[]{4,3,6,7,2,1,9};
//一共需要比较多少趟
for (int i=0;i<arr.length-1;i++){
//每趟 最小值索引
int minIndex=i;
for (int j=i+1;j<arr.length;j++){
if (arr[j]<arr[minIndex]){
minIndex=j;
}
}
//如果 最小值索引 不同于 i ,需要交换
if (minIndex!=i){
int temp=arr[minIndex];
arr[minIndex]=arr[i];
arr[i]=temp;
}
}
for (int i:arr) System.out.println(i);
}
原文:https://www.cnblogs.com/anpeiyong/p/12550256.html