本文共 2382 字,大约阅读时间需要 7 分钟。
算法思路: 每次在待排序序列中选取一个最小的元素放入已排好序列最后,总共进行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; }}
转载地址:http://opczb.baihongyu.com/