选择排序(学习笔记)
选择排序
选择排序的基本思想是冒泡排序,记录当前位置i和最小值k的位置,使用一个变量j往后寻找。
每一轮找到最小值后与第一个元素进行交换,以此类推。
不使用辅助变量交换两个元素的值方法
package com.company.sort;import java.util.Random;//选择排序的基本思想是冒泡排序,记录当前位置i和最小值k的位置,使用一个变量j往后寻找。
// 每一轮找到最小值后与第一个元素进行交换,以此类推。
public class SelectSort {public static final int ARRLENGTH = 10;public static void main(String[] args) {//创建数组int[] unSortArray = createArray(ARRLENGTH);//打印初始化未排序数组printArray(unSortArray);//选择排序selectSort(unSortArray);//打印选择排序后的数组printArray(unSortArray);}//创建数组方法(数组中的元素随机生成)public static int[] createArray(int length){int[] arr =new int[length];Random random = new Random();for (int i = 0; i < arr.length; i++) {arr[i] = random.nextInt(20);//[0,20)}return arr;}//打印数组方法public static void printArray(int[] arr){for (int i=0;i<arr.length;i++) {if (i==0){if (arr.length==1){System.out.println("["+arr[0]+"]");}else{System.out.print("["+arr[i]+",");}}else if(i==arr.length-1){System.out.println(arr[i]+"]");}else {System.out.print(arr[i]+",");}}System.out.println("--------------------------------------------------------");}//选择排序法public static void selectSort(int[] arr){for (int i = 0; i < arr.length; i++) {int k=i;for (int j = i+1; j <arr.length ; j++) {if (arr[k]>arr[j]){k = j;}}//这里不知为何不使用辅助变量的两种交换元素方法不适用/*arr[i] = arr[i]+arr[k];arr[k] = arr[i]-arr[k];arr[i] = arr[i]-arr[k];-------------------------------a= a^b;b =a^ba =a^b;*/int temp = arr[i];arr[i] = arr[k];arr[k] = temp;}}/* public static void selectSort(int[] arr,int length){for (int i = 0; i < length; i++) {int k = i;for (int j = i+1; j <length ; j++) {if (arr[j]<arr[k]){k = j;}}int temp = arr[i];arr[i] = arr[k];arr[k] = temp;}}*/
}
核心代码示意图: