第十一天

学到了查找的方法,有顺序查找,二分查找,

明天打算学习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("没有找到");
        }
    }

 

posted @ 2020-07-16 15:48  yasai  阅读(92)  评论(0编辑  收藏  举报