package com.test;
public class SelectSort {
public static void main(String[] args) {
int numbers[] = { 3, 7, 5, 1, 67, 9, 2, 34, 12, 45 };
selectSort(numbers);
}
// =====选择排序=====
// 选择排序是一种简单直观的排序算法。
// 它的工作原理是每一次从未排序的数据元素中选出最小的一个元素,存放在序列的起始位置。
// 然后,再从剩余未排序元素中继续寻找最小元素,然后放到剩余未排序序列的起始位置.以此类推,直到全部未排序的数据元素排完。
// 选择排序是不稳定的排序方法。
// 3 7 5 1 67 9 2 34 12 45 (最初数组)
// 1 7 5 3 67 9 2 34 12 45 第1次循环(找到最小元素1,1和3交换)
// 1 2 5 3 67 9 7 34 12 45 第2次循环(找到未排序序列最小元素2,2和7交换)
// 1 2 3 5 67 9 7 34 12 45 第3次循环(找到未排序序列最小元素3,3和5交换)
// 1 2 3 5 67 9 7 34 12 45 第4次循环
// 1 2 3 5 7 9 67 34 12 45 第5次循环
// 1 2 3 5 7 9 67 34 12 45 第6次循环
// 1 2 3 5 7 9 12 34 67 45 第7次循环
// 1 2 3 5 7 9 12 34 67 45 第8次循环
// 1 2 3 5 7 9 12 34 45 67 第9次循环
// 1 2 3 5 7 9 12 34 45 67 第10次循环
public static void selectSort(int[] numbers) {
int size = numbers.length;
for (int i = 0; i < size - 1; i++) {
int index = i; //用来存放未排序序列的第一个元素
for (int j = i + 1; j < size; j++) {
//未排序序列的每一个元素与未排序序列的第一个元素比较,找到未排序序列的最小元素下标
if (numbers[index] > numbers[j]) {
index = j;
}
}
//然后将找到的最小元素与未排序序列的第一个元素交换
int temp=numbers[i];
numbers[i]=numbers[index];
numbers[index]=temp;
}
}
}