第十一天
学到了查找的方法,有顺序查找,二分查找,
明天打算学习java工具类中算法的实现
快速排序:
快速排序主要是通过设定一个基准值,然后以这个基准值为标杆,将待排序的列按大小分成比基准值大的和比基准值小的两部分,然后再对划分完的子序列进行快排。
(1)首先选定基准值,一般设置low所对应的元素位置为基准值
(2)在高位指针始终不小于低位指针的前提下:
高位指针开始判断其是否比基准值大,如果符合,高位指针减1,继续寻找,直到
找到不符合的情况,然后把该值赋给此时低位所在位置。
低位指针开始判断其是否比基准值小,如果符合,低位指针加1,继续寻找,直到
找到不符合情况,然后将该值赋给此时高位指针所指位置。
如此反复,直到低位与高位指针重合,此时,再将当前的基准值赋给低位指针所指
的值,这样就完成了一次排序。此时,基准值就到了其最终位置上,然后继续对以
基准值为界的两部分进行排序。
import java.util.Arrays; public class QuickSortDemo { public static void main(String[] args) { int[] vec= {37,47,23,100,19,56,56,99,9}; QuickSortDemo q=new QuickSortDemo(); q.quicksort(vec,0,vec.length-1); System.out.println("排序后:"+Arrays.toString(vec)); } public void quicksort(int a[],int low,int high) {//假设传入low=0; int pivot,p_pos,i; //high=a.lenght-1; if(low<high) { p_pos = low; pivot=a[p_pos]; for(i=low +1 ;i<=high;i++) { if(a[i]>pivot) { p_pos++; int tmp =a[p_pos]; a[p_pos]=a[i]; a[i]=tmp; } } int tmp =a[low]; a[low]=a[p_pos]; a[p_pos]=tmp; quicksort(a,low,p_pos-1); quicksort(a,p_pos+1,high); } } }
二分查找:
(1)查找前,元素须进行排序。
(2)确定区域的中间位置: mid= (low+high)/2。
(3)将待查的K值与V[mid].key比较:若相等,则查找成功并返回此位置,否则,需 确定新的查找区间,继续二分查找,具体方法如下。
public class BinarySerachDemo { public static void main(String[] args) { int[] a= {2,3,4,5,7,9,8}; int value =5; int count=-1; int low =0; int high=a.length-1; while(low<=high) { int mid=(low+high)/2; if(a[mid]==value) { count=mid; break; } else if(a[mid]>value) { high=mid-1; }else { low=mid+1; } } if(count!=-1) { System.out.println("下标在:"+count+"位置"); }else { System.out.println("没有找到"); } }