算法简介
选择排序:是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
选择排序是不稳定的排序方法。比如序列【6,6,2】,第一次就将第一个【6】与【2】交换,导致第一个6挪动到第二个6后面,在排序的过程中改变了两个6的相对位置。
时间复杂度: O(N^2)
空间复杂度: O(1)
一、算法步骤
选择排序是每次循环找出最值,循环结束后将最值调整到对应位置,交换的次数少。
假定排序结果要求是递增序列。
1、每次循环找出最小值,循环结束后将最小值调整到开始排序的位置。
2、第1趟,从第0个元素开始,找寻序列中最小值,然后将最小值和第0个元素交换。排序结果,第0个元素就是队列中的最小值。
3、第2趟,从第1个元素开始,找寻序列中最小值,然后将最小值和第1个元素交换。排序结果,第1个元素就是剩余队列中的最小值。
...
一共需要进行n-1趟排序。
二、代码实现(Java)
public class SelectionSort {
public static void main(String[] args){
int[] array = {3, 7, 1, 2, 1, 2, 9, 5, 8};
selectionSort(array);
print(array);
}
private static void selectionSort(int[] array){
if(array==null || array.length<2) return;
int length = array.length;
for(int i=0; i<length-1; i++){
//设定当前起始位置为最小值
int min = i;
for(int j=i+1; j<length; j++){
if(array[j]<array[min]){
//改变最小值位置
min = j;
}
}
//最小值位置和当前起始位置不一致,则需要交换
if(min!=i){
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
}
private static void print(int[] array){
for (int x : array){
System.out.print(x+" ");
}
System.out.println();
}
}
下一篇 1.3、排序-插入排序(Insert Sort)