:选择排序
- 选择排序(Selection sort)是一种简单直观的排序算法。
- 它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。
- 以此类推,直到全部待排序的数据元素的个数为零。
- 选择排序是不稳定的排序方法
package com.atguigu.sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class SelectSort {
public static void main(String[] args) {
//
int[] arr = { 101, 34, 119, 1, 90, 123 };
System.out.println("排序前:\n" + Arrays.toString(arr));
selectSort(arr);
System.out.println("排序前:\n" + Arrays.toString(arr));
System.out.println("耗时测试:选择排序的速度(O(n^2)),给80000个数据");
timeSort();
}
// 选择排序
public static void selectSort(int[] arr) {
/*
* 使用逐步推导的方式 原始数组: 101,34,119,1
*/
for (int i = 0; i < arr.length; i++) {
int minIndex = i;
int min = arr[i];
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
min = arr[j];//重置min
minIndex = j;//重置minIndex
}
}
// 将最小值,放在arr[0],交换
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;
}
// System.out.println("第" + (i + 1) + "轮选择排序后~~");
// System.out.println(Arrays.toString(arr));
}
}
// 耗时测试
public static void timeSort() {
// 测试排序的速度(O(n^2)),给80000个数据
// 创建一个80000个随机数的数组
int[] arr = new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i] = (int) (Math.random() * 8000000);// 生成一个【0,8000000】数
}
Date data1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str = simpleDateFormat.format(data1);
System.out.println("八万个随机数据-排序前的时间是: " + date1Str);
selectSort(arr);
Date data2 = new Date();
String date2Str = simpleDateFormat.format(data2);
System.out.println("八万个随机数据-排序后的时间是: " + date2Str);
}
}