1 选择排序简介
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
2 图解选择排序算法
选择排序的基本思想如下:
第一次:从arr[0]~arr[n-1]中选取最小值,与arr[0]进行交换;
第二次:从arr[1]~arr[n-1]中选取最小值,与arr[1]进行交换;
第三次:从arr[2]~arr[n-1]中选取最小值,与arr[2]进行交换;
…
第 i 次:从arr[i]~arr[i-1]中选取最小值,与arr[i]进行交换;
总共通过n-1次,可以得到从小到大的有序序列。
以序列:{8, 3, 2, 1, 7, 4, 6, 5} 为例!分步骤图解如下:
思路说明:
在每趟排序时,都假定当前位置的元素为最小值,如果在遍历过程中发现有比当前位置元素还小的值,则替换最小值。(先将最小值记录,此趟遍历完成再替换)
选择排序一共有数组大小-1趟排序。
3 选择排序代码实现
import java.util.Arrays; /** * @author 兴趣使然黄小黄 * @version 1.0 * 选择排序 */ public class SelectSort { public static void main(String[] args) { int[] array = {8, 3, 2, 1, 7, 4, 6, 5}; System.out.println("排序前: " + Arrays.toString(array)); selectSort(array); System.out.println("排序后: " + Arrays.toString(array)); } //选择排序 public static void selectSort(int[] arr){ //选择排序过程 for (int i = 0; i < arr.length - 1; i++) { int minIndex = i; //假定最小索引,最小值为第一个元素 int min = arr[minIndex]; for (int j = i + 1; j < arr.length; j++) { if (min > arr[j]){ //更新最小值 min = arr[j]; minIndex = j; } } //将最小值放进arr[i] if (i != minIndex){ arr[minIndex] = arr[i]; arr[i] = min; } //输出每轮排序后的结果 System.out.println("第" + (i+1) + "趟: " + Arrays.toString(arr)); } } }
结果如下