选择法排序的思路:
第一步:把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来比较完后,第一位就是最小的;
第二步:然后再从第二位和剩余的其他所有位进行比较,只要比第二位小,就换到第二个位置来
比较完后,第二位就是第二小的
以此类推,最终就完成从小到大的排序;
Java代码:
package sort;
public class SelectionSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] arr = {12,14,568,41,5,44,1,14};
System.out.println("排序前的数组:");
//打印排序之前的数组
print(arr);
sort(arr);
System.out.println();
System.out.println("排序后的数组:");
//打印排序之后的数组
print(arr);
}
public static void sort(int [] arr){
for (int i = 0; i < arr.length-1; i++) {
for (int j = i; j < arr.length; j++) {
if (arr[j] < arr[i]) {
//从大往小排还是从小往大排只要控制if语句里的条件即可
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
/*打印数组中原素的方法*/
public static void print(int [] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
注意选择排序与冒泡排序的区别:
- 冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。
- 选择排序的平均时间复杂度比冒泡排序的稍低:
同样数据的情况下,2种算法的循环次数是一样的,但选择排序只有0到1次交换,而冒泡排序只有0到n次交换