public void choice(int a[])
{
for(int i=0;i <=a.length-1;i++)
{
for(int j=i+1;j<=a.length-1;j++)
{
if(a[j] < a[i])
{
int temp=0;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
其实选择排序是非常简单的,和冒泡排序有异曲同工之妙。就是把元素分成两部分,一部分是有序的,另外一部分是无序的;每次循环从无序的元素中选取一个元素放到有序的元素中,依次循环到最后把所有元素都放到了有序那一部分中(也就是无序部分,元素为零);
基本思路:
- 1、外循环:循环每个位置(其实就是选择了这个位置,然后用内循环去选择一个合适的数,放到这个位置);
- 2、内循环:在无序元素中选择一个合适的数;
- 3、把第二步选中的数据放到第一步选中的位置上就可以了;
时间复杂度
选择排序的时间复杂度不像前面几种排序方法那样,前面几种排序方法的时间复杂度不是一眼就能看出来的,而是要通过推导计算才能得到的。一般会涉及到递归和完全二叉树,所以推导也不是那么容易。但是选择排序就不一样了,你可以很直观的看出选择排序的时间复杂度:就是两个循环消耗的时间;
比较时间:T = (n-1))+ (n -2)+(n - 3)…. + 1; ===>> T = [n*(n-1) ] / 2;
交换时间:最好的情况全部元素已经有序,则 交换次数为0;最差的情况,全部元素逆序,就要交换 n-1 次;