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

原创 2018年04月17日 17:17:39

快速排序:

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了,所以平时多写点代码,多实现一些算法,帮助大大的。


折半查找、快速排序

折半查找循环实现''' 折半查找 循环实现 ''' def binarySearch(list, key): low = 0 high = len(list) ...
  • u010758410
  • u010758410
  • 2017-12-03 16:13:53
  • 70

使用qsort()和bsearch()进行快速排序和折半查找

使用提供的库函数qsort()和bsearch(),进行快速排序和折半查找。 同过对字符串的排序和查找,掌握对qsort()和bsearch()的使用。首先理解快速排序的算法,就是先设定关键字,以此...
  • woxiangyaozhe
  • woxiangyaozhe
  • 2014-12-02 17:52:06
  • 483

java 快速排序 折半查找的界面实现 (递归与分治法)

  • 2012年02月20日 15:56
  • 216KB
  • 下载

Java 实现二分查找\折半查找(速度快的查询有序列表)

二分查找又称折半查找,优点是比较次数少,查找速度快;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。         该算法要求:   ...
  • lzy1357986420
  • lzy1357986420
  • 2016-07-21 23:23:13
  • 380

快速排序与折半查找算法函数:qsort与bsearch

qsort用来排序,bsearch用二分法来查找元素 void qsort( void *base, size_t num, size_t width,int (__cdecl *compare)(...
  • heron804
  • heron804
  • 2013-04-21 11:41:38
  • 1202

java 快速排序 折半查找的界面实现

  • 2010年05月16日 00:22
  • 228KB
  • 下载

Java - 用Java写一个折半查找。

折半查找,也称二分查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在...
  • chimomo
  • chimomo
  • 2017-11-03 10:04:59
  • 505

java实现查找算法——折半查找(二分查找)

折半查找算法折半查找(Binary Search)又称为二分查找,其要求数据序列呈线性结构,也就是经过排序的。对于没有经过排序的,可以查阅我之前的排序算法文章进行预排序,然后进行折半查找操作。譬如数组...
  • xu__cg
  • xu__cg
  • 2016-09-26 18:53:10
  • 1187

用java实现折半查找

package service; import java.util.Scanner; public class Test003 { public static int Max = 20; //...
  • Nightliar
  • Nightliar
  • 2017-01-14 23:59:55
  • 3077

Java实现折半查找(二分查找)的递归和非递归算法

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wintys.blog.51cto.com/425414/94051 ...
  • DWFhxl
  • DWFhxl
  • 2013-10-16 20:20:43
  • 2533
收藏助手
不良信息举报
您举报文章:java——实现快速排序与折半查找
举报原因:
原因补充:

(最多只允许输入30个字)