选择排序的基本思想是:在未排序的序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
package com.example.datastructures.sort;
import java.util.Arrays;
/**
* @author maoyouhua
* @version jdk21
*
* 选择排序
*
* 选择排序的基本思想是:在未排序的序列中找到最小(或最大)元素,存放到排序序列的起始位置,
* 然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
*/
public class SelectSort {
/**
*
* @param arr 排序数组
*/
private static void selectSort(int[] arr){
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
temp = arr[i];
int minIndex = min(arr, i);
arr[i] = arr[minIndex];
arr[minIndex] = temp;
System.out.println("第"+ (i+1) +"次排序");
System.out.println(Arrays.toString(arr));
}
}
/**
* 从指定下标起找出数组最小的数
* @param arr
* @param index
* @return
*/
private static int min(int[] arr, int index){
int minIndex = index;
for (int i = index; i < arr.length - 1; i++) {
if (arr[minIndex] > arr[i+1]){
minIndex = i+1;
}
}
return minIndex;
}
/**
* 排序效率测试
* 花费时间是:1171毫秒
*/
private static void efficiencyTest(){
int capacity = 80000;
int[] arr = new int[capacity];
for (int i = 0; i < capacity; i++) {
arr[i] = (int)(Math.random() * 100 * capacity);
}
long start = System.currentTimeMillis();
selectSort(arr);
long end = System.currentTimeMillis();
System.out.println("花费时间是:" + (end - start) + "毫秒");
}
/**
*第1次排序
* [-3, 9, -1, 7, 3, 10, 8, 3, -2]
* 第2次排序
* [-3, -2, -1, 7, 3, 10, 8, 3, 9]
* 第3次排序
* [-3, -2, -1, 7, 3, 10, 8, 3, 9]
* 第4次排序
* [-3, -2, -1, 3, 7, 10, 8, 3, 9]
* 第5次排序
* [-3, -2, -1, 3, 3, 10, 8, 7, 9]
* 第6次排序
* [-3, -2, -1, 3, 3, 7, 8, 10, 9]
* 第7次排序
* [-3, -2, -1, 3, 3, 7, 8, 10, 9]
* 第8次排序
* [-3, -2, -1, 3, 3, 7, 8, 9, 10]
*/
public static void main(String[] args) {
int[] arr = {3,9,-1,7,-3,10,8,3,-2};
selectSort(arr);
efficiencyTest();
}
}