思想: 每次找出最小数的坐标,然后与前面交换位置。
代码:
```java
int[] arr
= new int[]{2,2,3,1}
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
;
}
}
if(i
!= minIndex
){
int tmp
= arr
[i
];
arr
[i
] = arr
[minIndex
];
arr
[minIndex
] = tmp
;
}
}
时间复杂度:
比较 第一次从1到n-1中选出最小的数,与A[0]交换位置 第二次从2到n-1中选出最小的数,与A[1]交换位置 … 总共比较次数:n-1 + n-2 + … +1 = n(n-1)/2
交换 最好,有序,只比较不交换,交换次数为0 最坏,逆序,每次选出一个最小的数都需要交换位置,交换次数n-1
所以O(n) = n(n-1)/2
空间复杂度: 最好,不交换,不用临时变量,O(0) 最坏,每次交换,用n-1个临时变量,O(n) 平均,O(1)