//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 if(v[start]>v[end]){ var temp = v[start]; v[start] = v[end]; v[end] = temp; break; } } //start==end;数组被分解为两个数组 if(n mysort(v,n,start-1); } if(m 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……
//当运气最差的时候,快速排序的时间复杂度=冒泡排序的时间复杂度。