java——实现快速排序与折半查找

快速排序:

public static void qs(int[] a,int begin,int end) {//a是要排序的数组,begin是排序的起点,end是排序的终点

        
        if(begin>=end) {return;}
        else {
            int i=begin;
            int j=end;
            int point=a[begin];
            while(i<j) {
                while(a[j]>=point&&(i<j))j--;
                a[i]=a[j];
                while(a[i]<=point&&(i<j))i++;
                a[j]=a[i];

            }

//////快排的实现过程就是一前一后两个"指针",用i代表指向起点的"指针",j代表指向结尾的“指针”

//////当两者相遇,第一次快排结束,然后再通过递归实现分位点之前和之后的排序

        a[i]=point;
        qs(a,begin,i-1);
        qs(a,i+1,end);         
        }

    }   

public static void main(String[] args) {
   int[] a=new int[] {6,2,3,9,11,4,5,12,8,10,21,1,8,4,3};
   //排序结果:{1 , 2 , 3  ,3  ,4 , 4  ,5 , 6 , 8  ,8, 9 , 10 , 11 , 12 , 21  }
 
    qs(a,0,14);
      for(int x:a) {  
          System.out.print(x+"  ");
     }
      

}

测试结果:


折半查找:

 public static int search(int[] a,int len,int value) {

          
           int low = 0,high = len-1,mid;  
            while (low <= high) {  
                mid = (low + high)/2;  
                if (value > a[mid]) {  
                    low = mid+1;  
                }else if (value < a[mid]){  
                    high = mid - 1;  
                }else{  
                    return mid;  
                }  
            }  
            return -1;  

    }

测试代码:

 public static void main(String[] args) {
   int[] a=new int[] {6,2,3,9,11,4,5,12,8,10,21,1,8,4,3};
   //{1 , 2 , 3  ,3  ,4 , 4  ,5 , 6 , 8  ,8, 9 , 10 , 11 , 12 , 21  }
     qs(a,0,14);//现学现卖,使用上面写好的快排
     System.out.println(search(a,15,5));//输出查找到的位置
     System.out.println(a[search(a,15,5)]);//验证是不是我们想要的结果
      

}

测试结果:


好了上面就是要讲的内容了,快排和折半查找都是特别基础的知识,就是有时候懒得去实现,其实在学习编程的时候,自己去手动敲一下代码,收获会非常大。能熟练的敲出一些基础的算法,很重要,我在面试阿里巴巴实习生的时候,面试官就让我现场写快排代码,虽然一直都知道快速排序的原理,但是一下子却写不出来。。。。结果就gg了。我有个同学更惨。。。都走到最后一面了,面试官让他在15分钟内写出阶乘的递归实现和非递归实现,没写出来,所以也gg了,所以平时多写点代码,多实现一些算法,帮助大大的。


阅读更多
文章标签: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭