相关特点
- 最好最坏时间复杂度O(n2)
- 空间复杂度O(1)
- 不稳定
- 数据规模越小越好。
基本思想
选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
算法描述
- 给定数组:int[] arr={里面n个数据};下标从1开始
- 第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arr[1]交换;
- 第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与arr[2]交换;
- 以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与arr[i]交换,直到全部排序完成。
举例说明
数组 int[] arr={5,2,8,4,9,1};
-------------------------------------------------------
第一趟排序: 原始数据:5 2 8 4 9 1
最小数据1,把1放在首位,也就是1和5互换位置,
排序结果:1 2 8 4 9 5
-------------------------------------------------------
第二趟排序:
第1以外的数据{2 8 4 9 5}进行比较,2最小,
排序结果:1 2 8 4 9 5
-------------------------------------------------------
第三趟排序:
除1、2以外的数据{8 4 9 5}进行比较,4最小,8和4交换
排序结果:1 2 4 8 9 5
-------------------------------------------------------
第四趟排序:
除第1、2、4以外的其他数据{8 9 5}进行比较,5最小,8和5交换
排序结果:1 2 4 5 9 8
-------------------------------------------------------
第五趟排序:
除第1、2、4、5以外的其他数据{9 8}进行比较,8最小,8和9交换
排序结果:1 2 4 5 8 9
代码实现(下标从0开始)
package Sort;
public class SelectSort {
public static void sort(long[] arr) {
int k = 0;//指向最小的值
long temp = 0;
for (int i = 0; i < arr.length - 1; i++) { //i表示已经排序好的有几个了
k=i; //k刚开始指向的是每次循环开始的位置
for (int j = i; j < arr.length; j++) { //j从i开始循环遍历各元素
if (arr[j] < arr[k]) { //判断j所对应的值小于k所对应的值
k=j; //k指向j,到最后k会指向最小的值
}
}
temp = arr[i]; //最小值与当前趟最开始的位置i交换位置
arr[i] = arr[k];
arr[k] = temp;
}
}
public static void main(String[] args) {
long[] arr = new long[]{5,2,8,4,9,1};
sort(arr);
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.print("]");
}
}