选择排序(Select Sorting)
基本介绍
选择排序也属于内部排序法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的
选择排序思想
选择排序(Select Sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0]~arr[n-1]
中选出最小值,与arr[0]交换,第二次从arr[1]~arr[n-1]
中选取最小值,与arr[1]交换,···,第i次从arr[i-1]~arr[n-1]
中选取最小值与arr[i-1]交换,总共哦通过 n-1 次,得到一个从小到大排列的有序序列
规则
- 选择排序一共有 数组大小-1 轮排序
- 每一轮排序,又是一个循环
- 先假定当前这个数是最小数
- 然后和后面的每个数进行比较,如果发现有比当前数更小的数,就重新确定最小数,并得到下标
- 当遍历到数组的最后时,就得到本轮最小数和下标
- 交换
代码示例
package com.crisp.Sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class SelectSort {
public static void main(String[] args) {
// int[] arr = {3,5,1,2,4,0,-1,9,8,7,0};
// print(arr);
// Select(arr);
// print(arr);
//创建有100000个数据的数组
int[] arr = new int[100000];
for(int i = 0; i < arr.length; ++i){
arr[i] = (int)(Math.random() * 100000);//生成一个[0,100000)的随机数
}
System.out.printf("原始数组为:");
print(arr);
Date data1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String data1Str = simpleDateFormat.format(data1);
Select(arr);
Date data2 = new Date();
String data2Str = simpleDateFormat.format(data2);
print(arr);
System.out.printf("排序过后数组为:");
System.out.printf("排序前的时间是:%s\n",data1Str);
System.out.printf("排序后的时间是:%s\n",data2Str);
}
//打印输出
public static void print(int[] arr){
System.out.println(Arrays.toString(arr));
}
//选择排序法 从小到大
public static void Select(int[] arr){
int minIndex;
int temp;
for(int i = 0; i < arr.length-1; ++i){
minIndex = i;
for(int j = i; j < arr.length-1; ++j){
if(arr[minIndex] > arr[j+1]){
minIndex = j+1;
}
}
temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}