选择排序的思路
先获取数组中首个元素值,然后与之后的每一个元素比较大小,当遇到比此元素小的值,标记该值所在的位置和大小,与首元素互换位置后继续向后比较,全部比较结束之后,从第二项开始重复以上过程即可,直至结束。
其实这个就是每一次遍历数组获取当前范围内最小值并将其放到首位。第一遍遍历是从首项开始,直至结尾,第二次是从第二项开始,直至结尾,第三次就从第三项。。。因为每一次遍历都是检查每一个元素,用大O表示法,每一次遍历需要的时间都是O(n),需要遍历n次,因此,整个选择排序需要的时间是O(n2)。
优劣
选择排序是一种相对灵巧的排序方式,因为其直接遍历数组,因此,可能方便执行一些个参数操作,但是其速度并不是很快,看具体场景吧。
实现
public int[] quickSort(int[] collection) {
int min = collection[0];
//标记当前最小值的下标位置
int nowIndex = 0;
for (int i = 0; i < collection.length; i++) {
min = collection[i];
nowIndex = i;
for (int j = i+1; j < collection.length; j++) {
if(collection[j]<min) {
//获取当前最小值的小标位置和元素大小
min = collection[j];
nowIndex = j;
}
}
//如果小于当前数值,即互换元素位置
if(nowIndex != i){
collection[nowIndex] = collection[i];
collection[i] = min;
}
}
return collection;
}
其他
当然,也可以不互换位置,直接放在新的数组里也是可以得,但是,会有额外的内存开销,虽然不大,见仁见智吧。
还有一个我学习java语法时的一个小的坑:数组不能直接print,也不能直接使用toString,这样操作会print出来首个元素的地址,并不是数组元素,可以使用Arrays.toString(数组名),就可以打印了,就其原因可以参照【Java】数组不能通过toString方法转为字符串 ,文章不错,很容易就能明白。