选择排序算法

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左右的时间。

以上是关于选择排序算法的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序 & 选择排序(升序)

常见的排序算法

JS中的冒泡排序与选择排序

采用冒泡算法对数组进行升序或降序排序

排序--选择排序Selection Sort Java实现

选择排序(升序)