尚硅谷数据结构与算法(Java)--13--选择排序

:选择排序

  • 选择排序(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);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值