选择排序


    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 次;

所以最优的时间复杂度 和最差的时间复杂度 和平均时间复杂度 都为 :O(n^2)

空间复杂度

空间复杂度,最优的情况下(已经有顺序)复杂度为:O(0) ;最差的 情况下(全部元素都要重新排序)复杂度为:O(n );;平均的时间复杂度:O(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值