选择排序的基本思想是:
每次从待排序的数据元素集合中选取关键字最小(或最大)的数据元素放到数据元素集合的最前(或最后),数据元素集合不断缩小,当数据元素结合为空时排序结束。
直接选择排序:
1,从待排序的数据元素集合中选取关键字最小的数据元素并将它与原始数据元素的第一个数据元素交换位置
2,然后从不包括第一个位置的数据元素集合中选取关键字最小的数据元素并将它与原始数据集合中的第二个数据元素交换位置
3,直到数据元素集合中只剩下一个数据元素为止
public class S{
public void SelectSort(int [] arr)
{
int len=arr.length;
// len-1 是当待排集合还剩一个元素时结束
for(int i=0;i<len-1;i++)
{
int small=i;
for(int j=i+1;j<len;j++)
{
if(arr[j]<arr[small])
{
small=j;
}
}
//待排序中最小的和第一个交换
int tmp=arr[i];
arr[i]=arr[small];
arr[small]=tmp;
System.out.print("第"+ (i+1)+"次排序:" +" ");
for(int x=0;x<arr.length;x++)
{
System.out.print(arr[x]+" ");
}
System.out.println();
}
}
public static void main(String [] args)
{
int []arr={49,38,65,97,49,13,27,76};
S s=new S();
s.SelectSort(arr);
System.out.print("最终排序:"+" ");
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
}
如第一张图片所示:相同的数字在排序前后相对位置发生了改变,所以
直接选择是不稳定的
时间复杂度:
最好=最坏=O(n^2);