选择排序算法
Posted Hard Coder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择排序算法相关的知识,希望对你有一定的参考价值。
一、选择排序算法基思想
从数组中选择最小元素,将它与数组的第一个元素交换位置。再从数组剩下的元素中选择出最小的元素,将它与数组的第二个元素交换位置。不断进行这样的操作,直到将整个数组排序,即数组长度为n需要需要进行n-1次选择排序才可以完成从小到大的排序,一般选择排序的平均时间复杂度为O(n^2)。
二、选择排序图解
黄色表示已排序部分,蓝色表示未排序部分,红色表示从未排序中选择的最小值。
三、代码实现
package Sort;
import java.util.Arrays;
public class SelectSort
public static void selectsort(int[] arr)
for(int i=0;i<arr.length-1;i++) // //最后一个元素没有必要给它排序,即数据有n个只需要进行n-1次选择排序
int minIndex=i;//假设最小值索引在i位置上,则最小值为arr[i]
for(int j=i+1;j<arr.length;j++)
if(arr[j]<arr[minIndex]) //此排序为升序排序,若为降序排序则为arr[j]>arr[minIndex]
minIndex=j;//若发现有值小于预先设定的最小索引所在的值,进行索引交换,便于进行索引对应的元素值交换
int temp=arr[i];//将假设i位置上的元素值与最小索引位置的元素值交换
arr[i]=arr[minIndex];
arr[minIndex]=temp;
public static void main(String[] args)
int[] arr= 101,34,119,1;
System.out.println("选择排序前:");
System.out.println(Arrays.toString(arr));
selectsort(arr);
System.out.println("选择排序后:");
System.out.println(Arrays.toString(arr));
运行结果:
从上图可以看出:选择排序一共进行arr.length-2次大循环,因为最后一个元素已经没有必要再次进行排序,且数据有n个只需要进行n-1次选择排序。
四、选择排序算法性能测试
package Sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class SelectSort
public static void selectsort(int[] arr)
for(int i=0;i<arr.length-1;i++) // //最后一个元素没有必要给它排序,即数据有n个只需要进行n-1次选择排序
int minIndex=i;//假设最小值索引在i位置上,则最小值为arr[i]
for(int j=i+1;j<arr.length;j++)
if(arr[j]<arr[minIndex]) //此排序为升序排序,若为降序排序则为arr[j]>arr[minIndex]
minIndex=j;//若发现有值小于预先设定的最小索引所在的值,进行索引交换,便于进行索引对应的元素值交换
int temp=arr[i];//将假设i位置上的元素值与最小索引位置的元素值交换
arr[i]=arr[minIndex];
arr[minIndex]=temp;
public static void main(String[] args)
int[] arr = new int[80000];
for (int i = 0; i < 80000; i++)
arr[i] = (int) (Math.random() * 8000000); // 生成一个[0, 8000000) 数
Date date1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//SimpleDateFormat是Java提供的一个格式化和解析日期的工具类
String date1Str = simpleDateFormat.format(date1);
System.out.println("选择排序前的时间是:" + date1Str);
selectsort(arr);
Date date2 = new Date();
String date2Str = simpleDateFormat.format(date2);
System.out.println("选择排序后的时间是:" + date2Str);
选择排序前的时间是:2021-01-31 12:21:58
选择排序后的时间是:2021-01-31 12:21:59
选择排序测试80000个数据一共需要1s左右的时间。
以上是关于选择排序算法的主要内容,如果未能解决你的问题,请参考以下文章