高效理解排序之——选择排序-含JAVA代码(简洁明了,非无脑COPY)

前言

选择排序(Selection Sort),(从小到大的排序)每次选择一个最值放入第一个位置,个人认为原理比冒泡排序的原理更好理解。

基本思路

  1. 在所有的元素中选择一个最小的元素,与第一个位置的元素交换位置。
  2. 在剩下的元素中选择一个最小的元素与第二个元素交换位置。
  3. 重复...

(如果上面的思路描述你没看懂也没关系,看下面的图解)

图解

第一轮:在6个元素中找到最小的元素1,与第一个位置的元素交换位置
​​​​

如何找出最小的元素?第一个元素与相邻的后一个元素比较大小(2<3)。找出两者中较小的一个元素(2)继续与下一个元素(1)比较,直到最后一个元素。这种依次比较的方式是不是跟之前说过的冒泡排序(Bubble Sort)很像,可以参考:高效理解排序之——冒泡排序-JAVA版

第六轮,只剩最后一个元素了,它既是最后一个元素中最小的元素,
也是所有元素中最大的元素,所有第六轮的比较可以省略。

代码实现

import java.util.Arrays;
public class SectionSort {
    public static void main(String []args) {
		int[] array = new int[]{2,3,1,6,4,5};
		sort(array);
		System.out.print(Arrays.toString(array));
    }
	
	public  static void sort(int[] array){
		for(int i=0;i < array.length -1; i++){
			int minIndex = i;
			for(int j = i;j<array.length;j++){
				minIndex = array[j] < array[minIndex] ? j:minIndex;
			}
            // 可以优化,当前位置就是最小无需交换
			// if(i == minIndex ) continue;
			int temp = array[i];
			array[i] = array[minIndex];
			array[minIndex] = temp;
			//System.out.println("第"+(i+1)+"轮:"+Arrays.toString(array));
		}
	
	}
}

效率分析

时间复杂度: O(n^{2})  空间负责度: O(1)  稳定性:不稳定 

本章关键字:选择 指定位置 

猜你喜欢

转载自blog.csdn.net/weixin_48470176/article/details/110409969