Arrays.sort排序原理

//jdk1.6中Arrays.sort的原理
//jdk1.8中Arrays.sort是由此结论进一步优化得到的。
//算法描述:
//1、设置两个变量i,j,在排序开始的时候,i=0,j=n-1
//2、以数组第一个元素作为flag,flag=a[0]
//3、从j开始向前搜索,j--,找到第一个比flag小的,让a[i]和a[j]交换。
//4、从i开始向后搜索,i++,找到第一个比flag大的,让a[i]和a[j]交换。
//5、重复3~4的过程,直到i和j相遇为止

//6、把分裂开的arr1和arr2都重复上述过程,直到全都只剩下一个元素为止。

var arr = new Aaary(5,6,8,7,2,9,1,3,4);

function (v,start,end){

    if(start>end){

    return ;

}

var n =start;

var m = end;

for(;start!=end;){

    //从后向前找

    for(;end>start;end--){

        if(v[start]>v[end]){

            var temp = v[start]; 

            v[start] = v[end];

            v[end] = temp;

            break;

        }

}

//从前往后找

for(;start<end;start++){

    if(v[start]>v[end]){

            var temp = v[start]; 

            v[start] = v[end];

            v[end] = temp;

            break;

        }

}

    //start==end;数组被分解为两个数组

    if(n<start-1){

           mysort(v,n,start-1);

    }

    if(m<start+1){

        mysort(v,start+1,m);

        }

    mysort(arr,0,arr.length-1);
    document.write(arr);

}

//性能对比:
//两个for,如果前后分别执行 和 嵌套执行
//分别是m+n次,和  m*n次
//概念:时间复杂度O(M+N)  O(M*N)
//冒泡排序比较了多少次?n+n-1+n-2……+1
//O((N+1)N/2)
//只保留最高次幂
//O((1/2)*N^2+(1/2)*N)
//系数去掉
//O((1/2)*N^2)
//O(N^2)


//快速排序的情况,;假定T(n)为长度为n的数组的比较次数
//T(n)=2T(n/2)+n次比较    ------1
//T(n/2)=2T(n/4)+n/2次比较。-------2
//----2*2得到-----3
//2T(n/2)=4T(n/4)+n次比较。--------3
//联立上面两个式子-----1和-----3
//T(n)=4T(n/4)+2n次比较。
//T(n)=128T(n/128)+log(128)n次比较




//T(n)=nT(1)+log(n)n次比较


//O(nlog(n)) *****
//O(nlgn)


//运气很差的情况
//  n/2     1  n-1
//n次比较1  n-1
//n-1次比较1,1,n-2
//……
//1次比较1,1,1,1,1,1,1,1,1,1……
//当运气最差的时候,快速排序的时间复杂度=冒泡排序的时间复杂度。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值