java实现选择排序
选择排序用for循环感觉比较容易,个人感觉递归不太好理解,所以递归方式就写了注释慢慢理解,可能是我不太熟的原因吧。
直接上代码:
方法一(递归实现):
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入一个整数:");
Scanner sac = new Scanner(System.in);
int integer = sac.nextInt();
System.out.println("请输入" + integer + "个数:");
Scanner sc = new Scanner(System.in);
int arr[] = new int[integer];
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
SelectionSort(arr, 0, arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
// 选择排序即从所有的数中找出最小的数放到最前面或最后面
// 第一层循环先固定要放的位置,第二层循环则找要放的位置所对应的数,即第一小然后第二小第三小
// 执行方式即先固定第一个只要找到比第一个小的就换,再找到更小的就换
public static int[] SelectionSort(int[] arr, int low, int high) {
boolean flag = false;
if (low == high) {
return arr;
} else {
if (low < high) {// 判断未排序的元素的下标是否到了最后
int indexMin = low;// 记录未排序的数的最小数的下标
int min = arr[indexMin];// 记录未排序数组最小数的下标的值
// 从未排序数组的最小数的下一个开始依次与最小数比较,如果小于最小值则交换,min保存已经比较的数中的最小值
for (int i = indexMin + 1; i < high; i++) {
if (arr[i] < arr[indexMin]) {
arr[indexMin] = arr[i];
arr[i] = min;
min = arr[indexMin];
}
}
// 从已经排好序的下一个开始再次比较
return SelectionSort(arr, low + 1, high);
}
}
return arr;
}
}
方法二:
public static void main(String[] args) {
System.out.println("请输入一个整数:");
Scanner sac = new Scanner(System.in);
int integer = sac.nextInt();
System.out.println("请输入" + integer + "个数:");
Scanner sc = new Scanner(System.in);
int arr[] = new int[integer];
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
int temp = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[i]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}