首先 实现简单的选择排序。
简单排序的思路很简单,就是通过遍历(数组的length次)的数组,每次遍历找出最小的放到数组的第一个位置,下次遍历时就不用考虑第0位置的数从第1的位置开始找1到length中最小的数。。。
实现最简单的选择排序
1 //实现选择排序的方法
2 public static int[] selSort(int[] arr){
3 //先遍历数组
4 for(int i = 0;i < arr.length;i++){
5 //在每次遍历时进行比较
6 for(int j = i;j < arr.length;j++){
7 //如果有元素大于后面的元素进行交换
8 if(arr[i] > arr[j]){
9 int temp = arr[i];
10 arr[i] = arr[j];
11 arr[j] = temp;
12 }
13 }
14 }
15 //将排序后的结果返回
16 return arr;
17 }
对选择排序进行优化,在这个排序中,每次找到比原数小的数就需要进行交换这样会造成资源的浪费,我们可以先保存(当前)第一位数字,用它和其它数去比较,找到最大(或者小)的那个数的下标,在循环执行完毕后看这个数字是不是被交换过,如果交换过那就交换下标对应的数值。
1 public static int[] selSort2(int[] arr){
2 //依旧先进行遍历
3 for(int i = 0;i < arr.length;i++){
4 //在每次遍历时保存当前位置的下标
5 int index = i;
6 //在每次遍历时进行比较
7 for(int j = i;j < arr.length;j++){
8 //这里必须时index 而不是 i ,因为index可以改,i不能改变
9 if(arr[index] > arr[j])
10 index = j;
11 }
12 //如果进行过交换那么 就交换它们的值
13 if(index != i){
14 int temp = arr[i];
15 arr[i] = arr[index];
16 arr[index] = temp;
17 }
18 }
19 //将交换后的结果返回
20 return arr;
21 }