选择法排序
理解:遍历数组所有元素,找出最小的元素,将它与第一个元素交换;然后遍历剩下的元素,找出最小的元素并与第二个元素交换;接下来再遍历剩下的元素,找出最小的元素并与第三个元素交换;直到比较n-1结束。
注:每次比较一个元素,将此时的小的数放在大的数之后,只进行一次,完了之后进入下一轮,最终到n-1轮为止。
代码部分(普通版):
public class selectsort {
public static void selectSort(int[] arr,int n) {
for (int i = 0; i < n; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
public static void main(String[] args) {
int[] arr = {5,7,6,7,8,12,4};
selectSort(arr,arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
在其中,我们不难发现可以将两层for循环优化为一层,最常用的方法就是用递归。
注意:递归本质上也是一种循环。
此时将第一层for用于递归就有:
代码部分(递归版):
public class selectsort {
public static void selectSort(int[] arr,int i,int n) {
if(i == n){
return;
}
else{
int min = i;
for (int j = i+1; j < n; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
selectSort(arr,i+1,n);
}
public static void main(String[] args) {
int[] arr = {5,7,6,7,8,12,4};
selectSort(arr,0,arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}