算法思路: 每次在待排序序列中选取一个最小的元素放入已排好序列最后,总共进行n-1趟就能完成排序。
性能分析:
时间复杂度: O(n^2)
空间复杂度: O(1)
稳定性: 不稳定
private static void selectSort(int[] arrays) {
/* 9 8 7 10 6
第一趟: 走三次
9 只需与8 7 10 6比较 以此类推
*/
for (int i = 0; i < arrays.length - 1; i++) { //循环n-1趟
int min = i;
for (int j = i + 1; j < arrays.length; j++) {
if (arrays[min] > arrays[j])
min = j;
}
if (min != i) {
/*int temp = arrays[min];
arrays[min] = arrays[i];
arrays[i] = temp;*/
arrays[min] ^= arrays[i];
arrays[i] ^= arrays[min];
arrays[min] ^= arrays[i];
}
}
完整代码:
package sort;
import java.util.Arrays;
import java.util.Scanner;
/**
* 选择排序
* 算法思路:每次在待排序序列中选取一个最小元素放入已排好序列最后,总共进行n-1趟就能完成排序
*/
public class BigData01 {
public static void main(String[] args) {
int[] arrays = input();
selectSort(arrays);
print(arrays);
}
/**
* 打印数组
* @param arrays
*/
private static void print(int[] arrays) {
System.out.print("升序后的数组为: ");
for (int array : arrays) {
System.out.print(array + " ");
}
/*System.out.println();
System.out.println(Arrays.toString(arrays));*/
}
/**
* 选择排序算法: 从小到大排序
* @param arrays
*/
private static void selectSort(int[] arrays) {
/* 9 8 7 10 6
第一趟: 走三次
9 只需与8 7 10 6比较 以此类推
*/
for (int i = 0; i < arrays.length - 1; i++) { //循环n-1趟
int min = i;
for (int j = i + 1; j < arrays.length; j++) {
if (arrays[min] > arrays[j])
min = j;
}
if (min != i) {
/*int temp = arrays[min];
arrays[min] = arrays[i];
arrays[i] = temp;*/
arrays[min] ^= arrays[i];
arrays[i] ^= arrays[min];
arrays[min] ^= arrays[i];
}
}
}
/**
* 获取多个数值
*
* @return
*/
public static int[] input() {
Scanner scanner = new Scanner(System.in);
System.out.print("请依次输入5个数: ");
int[] arrays = new int[5];
for (int i = 0; i < arrays.length; i++) {
arrays[i] = scanner.nextInt();
}
return arrays;
}
}