|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于一个大型项目,如果用java来作,可能需要9个月,并且可能需要翻阅10本以上的书,但如果用ruby来作,3个月,3本书就足够了,而.net也不过3,4本书足以,这就是区别。
packageUtils.Sort;
/**
*疾速排序,请求待排序的数组必需完成Comparable接口
*/
publicclassQuickSortimplementsSortStrategy
{ privatestaticfinalintCUTOFF=3; //当元素数年夜于此值时接纳疾速排序
/**
*使用疾速排序算法对数组obj举行排序,请求待排序的数组必需完成了Comparable接口
*/
publicvoidsort(Comparable[]obj)
{ if(obj==null)
{ thrownewNullPointerException("Theargumentcannotbenull!");
}
quickSort(obj,0,obj.length-1);
}
/**
*对数组obj疾速排序
obj 待排序的数组
left数组的下界
right数组的上界
*/
privatevoidquickSort(Comparable[]obj,intleft,intright)
{ if(left+CUTOFF>right)
{ SortStrategyss=newChooseSort();
ss.sort(obj);
} else
{ //找出枢轴点,并将它放在数组最初面的地位
pivot(obj,left,right);
inti=left,j=right-1;
Comparabletmp=null;
while(true)
{ //将i,j分离移到年夜于/小于关键值的地位
//由于数组的第一个和倒数第二个元素分离小于和年夜于枢纽元,以是不会产生数组越界
while(obj[++i].compareTo(obj[right-1])<0) {}
while(obj[--j].compareTo(obj[right-1])>0) {}
//互换
if(i<j)
{ tmp=obj[i];
obj[i]=obj[j];
obj[j]=tmp;
}
else break;
}
//将关键值与i指向的值互换
tmp=obj[i];
obj[i]=obj[right-1];
obj[right-1]=tmp;
//对关键值左边和右边数组持续举行疾速排序
quickSort(obj,left,i-1);
quickSort(obj,i+1,right);}
}
/**
*在数组obj当选取关键元,拔取办法为取数组第一个、两头一个、最初一个元素中两头的一个。将关键元置于倒数第二个地位,三其中最年夜的放在数组最初一个地位,最小的放在第一个地位
obj要选择关键元的数组
left数组的下界
right数组的上界
*/
privatevoidpivot(Comparable[]obj,intleft,intright)
{ intcenter=(left+right)/2;
Comparabletmp=null;
if(obj[left].compareTo(obj[center])>0)
{ tmp=obj[left];
obj[left]=obj[center];
obj[center]=tmp;
}
if(obj[left].compareTo(obj[right])>0)
{ tmp=obj[left];
obj[left]=obj[right];
obj[right]=tmp;
}
if(obj[center].compareTo(obj[right])>0)
{tmp=obj[center];
obj[center]=obj[right];
obj[center]=tmp;
}
//将关键元置于数组的倒数第二个
tmp=obj[center];
obj[center]=obj[right-1];
obj[right-1]=tmp;
}
}
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。 |
|