选择排序(速度比冒泡快)

百度百科 

https://baike.baidu.com/item/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F/9762418?fr=aladdin

 

分析图

 思路图

 第一次的代码为:我们先一次一次的排序

package com.afmobi;

import java.util.Arrays;

public class SelectSort {
	
	
	public static void main(String[] args) {
		int[] arr = {0,-1,3,-5,9,};
		SelectSort.selectSort(arr);
	}
	
	
	public static void selectSort(int[] arr) {
		// 原始数组     0,-1,3,-5,9,
		//第1轮  结果   -5,-1,3,0,9
		
		int minIndex = 0;
		int min = arr[0];
		

		for (int i = 0 +  1; i < arr.length; i++) {  // 先跟第一个数比 
			if (min >  arr[i]) {  // 找到更小的值  重置minIndex|min
				min = arr[i];
				minIndex = i;
			}
		}
		// 循环遍历之后得到最小值才进行交换位置
		if (minIndex != 0) {
			arr[minIndex] = arr[0];
			arr[0] = min;
		}
	
		
		System.out.println("第一轮后");
		
		System.out.println(Arrays.toString(arr));
		
		
		
		//第2轮  结果   -5,-1,3,0,9
		minIndex = 1;
		min = arr[1];
		
		for (int i = 1  +  1; i < arr.length; i++) {  // 先跟第一个数比 
			if (min >  arr[i]) {  // 找到更小的值  重置minIndex|min
				min = arr[i];
				minIndex = i;
			}
		}
		// 循环遍历之后得到最小值才进行交换位置
		if (minIndex != 1) {
			arr[minIndex] = arr[1];
			arr[1] = min;
		}
		
		System.out.println("第二轮后");
		
		System.out.println(Arrays.toString(arr));
		
		// 第3轮 结果 -5,-1,0,3,9
		minIndex = 2;
		min = arr[2];

		for (int i =  2 + 1 ; i < arr.length; i++) { // 先跟第一个数比
			if (min > arr[i]) { // 找到更小的值 重置minIndex|min
				min = arr[i];
				minIndex = i;
			}
		}
		// 循环遍历之后得到最小值才进行交换位置
		if (minIndex != 2) {
			arr[minIndex] = arr[2];
			arr[2] = min;
		}

		System.out.println("第三轮后");

		System.out.println(Arrays.toString(arr));
		
		// 第4轮 结果 -5,-1,0,3,9
		minIndex = 3;
		min = arr[3];

		for (int i = 3 + 1; i < arr.length; i++) { // 先跟第一个数比
			if (min > arr[i]) { // 找到更小的值 重置minIndex|min
				min = arr[i];
				minIndex = i;
			}
		}
		// 循环遍历之后得到最小值才进行交换位置
		if (minIndex != 3) {
			arr[minIndex] = arr[3];
			arr[3] = min;
		}

		System.out.println("第四轮后");

		System.out.println(Arrays.toString(arr));
		
		
		
	}
}

运行结果:

看到代码每一轮重复的部分了吧

于是修改代码

package com.afmobi;

import java.util.Arrays;

public class SelectSort {
	
	
	public static void main(String[] args) {
		int[] arr = {0,-1,3,-5,9,};
		SelectSort.selectSort(arr);
	}
	
	
	public static void selectSort(int[] arr) {
		// 原始数组     0,-1,3,-5,9,
		//第1轮  结果   -5,-1,3,0,9
		
		for(int i = 0; i < arr.length -1 ; i++){

			int minIndex = i;
			int min = arr[i];
			

			for (int j = i +  1; j < arr.length; j++) {  // 先跟第一个数比 
				if (min >  arr[j]) {  // 找到更小的值  重置minIndex|min
					min = arr[j];
					minIndex = j;
				}
			}
			// 循环遍历之后得到最小值才进行交换位置
			if (minIndex != i) {
				arr[minIndex] = arr[i];
				arr[i] = min;
			}
		
			
			System.out.printf("第%d轮后", i +1);
			
			System.out.println(Arrays.toString(arr));
			
		}
}

测试结果:

 当我们对一些排序算法没思路时,可以把问题缩小化,一步一步来,你就会发现规律!从而实现最后的代码!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值