排序算法-选择排序
Posted 异次猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-选择排序相关的知识,希望对你有一定的参考价值。
选择排序
选择排序的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完.选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面).
算法步骤
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置.
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.
重复第二步,直到所有元素均排序完毕.
算法复杂度
时间复杂度:O(n^2), 无论什么数据进去都是O(n^2)的时间复杂度. 空间复杂度:O(1)
算法实现
选择排序
元素从小到大排列的算法实现
/**
* 选择排序算法
* @param arr 待排序数组
*/
public static void selection(int arr[]){
// 外循环, 要处理的数据所在位置
for(int i = 0; i < arr.length - 1; i++){
int min = i;
// 内循环, 寻找未排序元素集中的最小值
for(int j = i + 1 ; j < arr.length; j++){
if(arr[j] < arr[min]){
// 记录最小值位置
min = j;
}
}
// 待处理的位置上不是最小值,将最小值交换到该位置上
if(i != min){
int tmp = arr[i];
arr[i] = arr[min];
arr[min] = tmp;
}
}
}
数据示例
初始序列:70 80 31 37 10 1 48 60 33 80
第1趟: [1] 80 31 37 10 70 48 60 33 80
第2趟: [1 10] 31 37 80 70 48 60 33 80
第3趟: [1 10 31] 37 80 70 48 60 33 80
第4趟: [1 10 31 33] 80 70 48 60 37 80
第5趟: [1 10 31 33 37] 70 48 60 80 80
第6趟: [1 10 31 33 37 48] 70 60 80 80
第7趟: [1 10 31 33 37 48 60] 70 80 80
第8趟: [1 10 31 33 37 48 60 70] 80 80
第9趟: [1 10 31 33 37 48 60 70 80] 80
结 果: [1 10 31 33 37 48 60 70 80 80]
以上是关于排序算法-选择排序的主要内容,如果未能解决你的问题,请参考以下文章