简单选择排序
算法思想
取出数据中最小(或最大)的一个与第一个数据做交换,然后在2-n中取出最小(或最大)的一个与第二个数据交换,以此类推。
算法图解
1.原始数据
2.选出最小的与第一个交换
3.从第二个开始找出最小的,与第二个交换
代码详解
public static int[] sort(int[] arr) {
int length = arr.length;
for (int i = 0; i < length; i++) {
int position = i;
for (int j = i + 1; j < length; j++) {
if (arr[position] > arr[j]) {
position = j;
}
}
int temp = arr[position];
arr[position] = arr[i];
arr[i] = temp;
}
return arr;
}
在上述代码中,每次仅选出最小的数据,如果每次都选出最小和最大的,可以减少循环次数,这种排序叫二元选择排序。
public static int[] binarySort(int[] arr) {
int length = arr.length;
int max, min, temp;
for (int i = 0; i < length / 2; i++) {
max = min = i;
for (int j = i + 1; j < length - i; j++) {
if (arr[j] > arr[max]) {
max = j;
}
if (arr[j] < arr[min]) {
min = j;
}
}
if (min != i) {
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
if (max != i) {
temp = arr[length - i - 1];
arr[length - i - 1] = arr[max];
arr[max] = temp;
}
}
return arr;
}