java常用排序算法
一? 顺序查找?
?????
??? 前提条件:无?
??? 从所传入集合的一段开始,顺序扫描,并以此将扫描到的值与所传如德key值进行比较。若有值与其相等,则表明查找成功;若扫描结束后仍没有值与key值相等,则表明查找失败。?
???
??? 示例代码:?
??? public int SeqSearch(int[] r, int k){???
?????? // 在顺序表R[0..n]中顺序查找关键字为k的结点,?
??????? // 成功时返回找到的结点位置,失败时返回0?
??????? for(int i = r.length - 1; i >= 0; i--) //从表后往前找?
??????? {?
??????????? if(r[i] == k)?
??????????? {?
??????????????? return i;? //若i为-1,表示查找失败,否则R[i]是要找的结点?
??????????? }?
??????? }?
??????? return -1;?
??? }?
?? ?缺点:执行效率低?
?? ?优点:实现方式简单,比较容易好理解,对集合的数据结构没什么要求?
二? 二分查找?
????
??? 前提条件:集合有序排列(递增、递减)?
?? 1? 确定查找范围,获取该区间的中间位置:middle=(low+high)/2?
?? 2? 然后将待查的K值与R[mid]比较:若相等,则查找成功并返回此位置,否则须确?
?????? 定新的查找区间,继续二分查找。?
?????? ① 若R[mid] > K,则由数组的有序性可知R[mid..n]均大于K,因此该结点必定是?
?????????? 在位置mid左边的R[0..mid-1]中?
?????? ② 若R[mid] < K,则要查找的K必在mid的右边的R[mid+1..n]中,下一次查找是?
?????????? 针对新的查找区间进行的。?
?? 3? 因此,从初始的查找区间R[1..n]开始,每经过一次与当前查找区间的中点位置上的?
?????? 结点关键字的比较,就可确定查找是否成功,不成功则当前的查找区间就缩小一半。?
?????? 这一过程重复直至找到关键字为K的结点,或者直至当前的查找区间为空(即查找失?
?????? 败)时为止。?
???????
?????? 示例代码:?
???????
?????? public? int? dichotomyMethod(int[] arrys,int keyValue){?
??????????
????????? int middle;?
????????? int low=0;?
????????? int high=arrys.length-1;?
????????? while(low<=high){?
????????????? middle=(low+high)/2?
????????????? if(arrys[middle]==keyValue){?
????????????????? return middle;?
????????????? }else if(arrys[middle]<keyValue){?
????????????????? low=middle+1;??????????????
????????????? }else{?
?????????????????? high=middle-1;?
????????????? }?
????????? }?
????????? return -1;?
????? }?