简单选择排序
1 理解
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。
2. 算法思想
算法思想:选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。
3.算法过程
在进行选择排序过程中分成有序和无序两个部分,开始都是无序序列
原始序列:4 10 9 8 1
第一轮排序:
默认数组中首元素为最小值,并用minindex标记其最小值的坐标,minindex = 0;
遍历剩下的元素,是否存在比当前小的元素,如果存在则交换二者的下标,minindex = 4(以本题为例)
此时,整个序列分为了两部分,有序序列{1},无序序列{10,9,8,4}
第二轮排序:
并用minindex标记其序列第二个元素的坐标,minindex = 1;
遍历剩下的元素,是否存在比当前小的元素,如果存在则交换二者的下标,minindex = 4(以本题为例)
此时,整个序列分为了两部分,有序序列{1 4},无序序列{9,8,10}
第三轮排序:
并用minindex标记其序列第三个元素的坐标,minindex = 2;
遍历剩下的元素,是否存在比当前小的元素,如果存在则交换二者的下标,minindex = 3(以本题为例)
此时,整个序列分为了两部分,有序序列{1 4 8},无序序列{9,10}
好了,接下来的过程就不去在详细的叙述了。
4.代码实现
public class SelectSort {
public static void main(String[] args) {
int[] arr = {101,34,119,1};
int len = arr.length;
for(int i = 0;i < len-1;i++)
{
// int minNum = arr[i];
int minIndex = i; //最小值的下标
for(int j = i+1;j < len;j++)
{
if(arr[i] > arr[j])
minIndex = j;
}
if(minIndex != i)
{
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
System.out.println(Arrays.toString(arr));
}
}