2.11 性能对比:顺序查找与二分查找

 顺序查找:

public static int orderSearch(int[] nums,int k){
    for(int i = 0;i

//不难发现,顺序查找的时间复杂度为O(n)

二分查找(折半查找):

  //二分查找的前提是有序

public static int binSearch(int[] nums,int k){
    int i = 0;
    int j = nums.length-1;
    int mid;
    while(i<=j){
        mid = i+((j-i)>>1);//防止溢出,移位效率更高
        if(nums[mid]==k){
            return mid;
        }else if(nums[mid]
  • 第1次 剩余的数为n/2
  • 第2次 剩余的数为n/4
  • 第3次 剩余的数为n/8
  • ....以此类推
  • 第k次 剩余的数为n/2^k(最后剩余的数应该是1)
  • 所以n/2^k=1
  • n = {log_2}^k
  • 所以时间复杂度为O(logn)

  顺序查找与二分查找的性能比较

  •    从时间复杂度上来看顺序查找的时间复杂度为O(n),也就是说面对10^8的数据顺序查找所需要耗费的时间为1s
  •    二分查找的时间复杂度为O({log_2}^n),面对10^8的数据所需要耗费的时间为\frac{27}{10^8} s
  •    很明显二分查找所耗费的时间比顺序查找少了很多很多
  •    用程序跑出来也是差不多的结果
package 第二章;

import java.util.Scanner;

public class Main {
	public static int orderSearch(int[] nums,int k){
	    for(int i = 0;i>1);//防止溢出,移位效率更高
	        if(nums[mid]==k){
	            return mid;
	        }else if(nums[mid]

  跑出来的结果是:

  

  可见顺序查找的所耗费的时间为二分查找的很多倍了

你可能感兴趣的:(●算法很美,顺序查找,二分查找,时间复杂度分析,性能比较,算法很美)