1. 选择排序

算法思想:
  每趟排序都从待排序数中选择一个最小的(或者最大的)数,交换到对应的位置。

算法描述:

  1. 从 i = 0 开始,通过遍历找到下标在 [i, n-1] 中的最小值的下标 index;
  2. 交换下标为 i 和下标为 index 位置的数据;
  3. i ++,继续执行第一步,直到 i >= n-1

算法特点:

  1. 每趟排序只交换一次
  2. 选择排序是时间复杂度最稳定的排序算法之一,因为无论什么数据进去都是O(n²)的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。
  3. 不稳定排序算法。

在这里插入图片描述

import java.util.Scanner;

/**
 * 选择排序是最稳定的排序算法之一,无论什么数据进去都是O(n<sup>2</sup>)的时间复杂度。<br>
 * 所以使用选择排序时,数据规模越小越好。<br>
 * 唯一的好处可能就是不需要占用额外空间。
 */
public class SelectSort {
    
    
	/**
	 * 升序排序:从小到大
	 */
	public void selectSort(int[] arr) {
    
    
		int len = arr.length;
		int minIndex;// 记录最小值所在下标
		for (int i = 0; i < len-1; i++) {
    
    
			minIndex = i;// 初始化最小值的下标为本趟排序的起始位置
			for (int j = i+1; j < len; j++) {
    
    
				if (arr[minIndex] > arr[j]) 
					minIndex = j;
			}
			swap(arr, minIndex, i);
		}
	}
	
	private void swap(int[] arr, int i, int j) {
    
    
		int temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40395874/article/details/115087088