(一)选择排序
选择排序是一个简单直观的排序算法,无论什么数据使用选择排序时间复杂度都是O(n²).所以使用选择排序的时候,数组规模越小越好,唯一的好处可能就是不占用额外的内存空间吧.
1.排序过程
1)首先使用角标为0的元素依次和后面的角标对应的元素进行比较,第一次比较完角标为0对应的元素为最小(最大)值.
2)从角标为1的元素开始,再依次和后面角标对应的元素进行比较,第二次比较完角标为1处的元素就是次小(次大)值.
3)重复执行上述步骤…依次进行比较,就可以得到一个从小到大(从大到小)排序好的数组.
public class Sort {
public static void main(String[] args) {
int a [] = new int[]{16,10,5,30,50,20};
//排序前,先把内容打印出来
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println(" ");
System.out.println("--------------------------------");
//选择法排序
//第一步: 把第一位和其他所有位进行比较
//如果发现其他位置的数据比第一位小,就进行交换
for (int i = 1; i < a.length; i++) {
if(a[i]<a[0]){
int temp = a[0];
a[0] = a[i];
a[i] = temp;
}
}
//把内容打印出来
//可以发现,最小的一个数,到了最前面
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println(" ");
//第二步: 把第二位的和剩下的所有位进行比较
for (int i = 2; i < a.length; i++) {
if(a[i]<a[1]){
int temp = a[1];
a[1] = a[i];
a[i] = temp;
}
}
//把内容打印出来
//可以发现,倒数第二小的数,到了第二个位置
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println(" ");
System.out.println("--------------------------------");
//可以发现一个规律
//移动的位置是从0 逐渐增加的
//所以可以在外面套一层循环
for (int j = 0; j < a.length-1; j++) {
for (int i = j+1; i < a.length; i++) {
if(a[i]<a[j]){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
//把内容打印出来
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println(" ");
}
}
输出结果如下所示: