选择排序
选择排序的基本思想是冒泡排序,记录当前位置i和最小值k的位置,使用一个变量j往后寻找。
每一轮找到最小值后与第一个元素进行交换,以此类推。
不使用辅助变量交换两个元素的值方法
java
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;
}
}
//异或法交换,加减法交换在这里不适用,因为i与k有可能指向同一元素,会导致出现很多0,最好还是用临时变量temp------Debug看一下排序过程就知道了。
/*arr[i] = arr[i]+arr[k];
arr[k] = arr[i]-arr[k];
arr[i] = arr[i]-arr[k];*/
/*arr[i] = arr[i]^arr[k];
arr[k] = arr[i]^arr[k];
arr[i] = arr[i]^arr[k];*/
-------------------------------
a= a^b;
b =a^b
a =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;
}
}*/
}
核心代码示意图: