选择排序(Selection sort)是一种简单直观的排序算法。选择排序的交换操作介于和次之间。选择排序的比较操作为次。选择排序的赋值操作介于和次之间。
运作方式如下:
1.首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。
2.接着从剩下的n-1个数据中选择次小的一个数据,将其和第2个位置的数据交换。
3.不断重复上述过程,直到最后两个数据完成交换。
package cn.kimtian.sort;
import java.util.Arrays;
/**
* 采用了两种方式来实现选择排序算法
*
* @author kimtian
*/
public class SelectionSort {
public static void main(String[] args) {
int[] arr = {1, 3, 6, 7, 8, 3, 3, 2, 0};
System.out.println(Arrays.toString(arr));
selectionSort(arr, 0);
System.out.println(Arrays.toString(arr));
System.out.println("==================");
selectionSort(arr);
System.out.println(Arrays.toString(arr));
}
/**
* 这是一个选择排序方法(采用递归的方式)
*
* @param arr 数组
*/
public static void selectionSort(int[] arr, int start) {
if (start < arr.length) {
int small = arr[start];
int index = start;
for (int i = start; i < arr.length; i++) {
if (arr[i] < small) {
small = arr[i];
index = i;
}
}
int middle = arr[start];
arr[start] = arr[index];
arr[index] = middle;
start++;
selectionSort(arr, start);
}
}
/**
* 这是一个选择排序方法
*
* @param arr 数组
*/
public static void selectionSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int minIndex = i;
//把当前遍历的数和后面所有的数依次进行比较,并记录最小数的下标
for (int j = i + 1; j < arr.length; j++) {
//如果后面比较的数比记录的最小数小,记录最小数的下标
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
//如果最小的数和当前遍历数的下标不一致,说明下标为minIndex的数比当前遍历的数更小
if (i != minIndex) {
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}
}