选择排序是一种容易理解并且相对较为简单的排序方式,他有两个特点:
1.运行时间与输入无关:你会发现如果这个数组中数据全部相等和
元素随机排列的相同长度数组他们的排序时间是一样长的,具体原因是由于其排序思想有关,
在下文会讲解。
2.数据移动最少:每次交换都会改变两个数组元素的值,所以交换次数与数组的大小是线性关系
相对于其他排序算法都不具备这一个特性。
排序思路:
首先确定最小的元素值放置于数组的那个索引位置,在选择排序中我们通常从数组的第一位开始
进行元素交换。然后开始寻找未排序元素中的最小元素值,寻找完成后,与交换索引位进行数
据交换。如此往复,直到整个数组排序完成,由于在整个排序过程中都是在选择未排序元素中的
最小值,所以我们叫这个算法为选择排序
数据解析:
待排序数组值:2 5 1 3(初始排序顺序)
第一轮排序后:1 5 2 3 (此时未排序元素为4个,找到最小值,与第一位索引处值进行数据
交换 )
第二轮排序后:1 2 5 3 (此时未排序元素为3个,找到最小值,与第二位索引处值进行数据
交换)
第三轮排序后:1 2 3 5 (此时未排序元素为2个,找到最小值,与第三位索引处值进行数据
交换,此时待交换索引增加至第四位,后续无可交换数据,排序结束)
参考算法
public static int[] sort(int[] result)
{
for(int i=0;i<result.length;i++)
{
int minIdenx=i;
for(int j=i+1;j<result.length;j++)
{
if(result[j]<result[minIdenx]) minIdenx=j;
}
int temp=result[minIdenx];
result[minIdenx]= result[i];
result[i]=temp;
}
return result;
}