选择排序算法
1、简介
选择排序,见名思义,就是需要使用选择的方法,将数组进行排序。以升序排序为例,可以采用两种方式,一是选择小的数将其放到数组左边,二是选择大的数,将其放到数组右边。本文主要介绍第一种方式,其他方式类似。
2、排序过程和流程图
详细排序过程流程图如下:
外层循环控制选择排序的次数,内层循环分两部分进行,一是选择出最小的值,二是将找到的最小值与当次循环左边起始位置进行交换,这样当次循环左边起始位置的值就拍好序了。
3、代码
public class SelectSort {
public static void selectSort(int[] arr) {
if (arr.length == 0) {
return;
}
// 外层循环,将内层循环找到的最小值的位置,与i位置交换
for (int i = 0; i < arr.length; i++) {
// 最小值位置从i开始
int minIndex = i;
// 内层循环找最小值的位置
for (int j = i; j < arr.length; j++) {
// 判断minIndex位置的数是否大于j位置的数
if (arr[minIndex] > arr[j]) {
// 大于,另minIndex=j
minIndex = j;
}
}
// 交换
swap(arr, minIndex, i);
}
}
private static void swap(int[] arr, int minIndex, int i) {
if (arr.length == 0) {
return;
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
public static void main(String[] args) {
int[] arr = {5, 2, 8, 12, 4, 6};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
selectSort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
4、总结
选择排序是一个入门级的排序算法,比较简单。其时间复杂度为O(n平方),空间复杂度为O(1)。