`
marlgl
  • 浏览: 73474 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

面试中,BubbleSort/BinarySearch 问到的几率真高

    博客分类:
  • J
阅读更多
最近在找工作,经常被问及,所以备份一下。

二分搜索:
public class BinarySearch {
    
    public static int search(int[] a, int key) {
	     return binarySearch(a, 0, a.length, key);
    }
    
    private static int binarySearch(int[] a,
         int fromIndex, int toIndex, int key) {
	int low = fromIndex;
	int high = toIndex - 1;

	while (low <= high) {
	    int mid = (low + high) >>> 1;
	    int midVal = a[mid];

	    if (midVal < key)
		low = mid + 1;
	    else if (midVal > key)
		high = mid - 1;
	    else
		return mid; // key found
	}
	return -(low + 1);  // key not found.
    }

}
//对测试Array先排序
//Arrays.sort(theArray);


冒泡:
public abstract class BubbleSorter {
    
    protected int length = 0;
    
    protected void doSort() {
        if (length <= 1)
            return;
        
        for (int nextToLast = length-2; nextToLast >= 0; nextToLast--)
            for (int index = 0; index <= nextToLast; index++) {
                if (outOfOrder(index))
                    swap(index);
            }
    }
    
    protected abstract void swap(int index);
    protected abstract boolean outOfOrder(int index);

}

public class IntBubbleSorter extends BubbleSorter {
    
    private int[] array = null;
    
    public void sort(int[] theArray) {
        array = theArray;
        length = array.length;
        
        doSort();
    }
    
    protected void swap(int index) {
        int temp = array[index];
        array[index] = array[index + 1];
        array[index + 1] = temp;
    }
    
    
    protected boolean outOfOrder(int index) {
        return (array[index] > array[index + 1]);
    }

}


BinarySearch 中常见bug:

6:             int mid =(low + high) / 2;
在一般情况下, 这个语句是不会出错的, 但是, 当low+high的值超过了最大的正int值 (2^31- 1) 的时候, mid会变成负值

那如何解决这个问题?
很简单, 修改这行语句为:

6:             int mid = low + ((high - low) / 2);
或者
6:             int mid = (low + high) >>> 1;

在c或者c++中, 则可以如下实现:
6:             mid = ((unsigned) (low + high)) >> 1;

原文:http://blog.csdn.net/longing_chen/archive/2006/06/10/785570.aspx


分享到:
评论

相关推荐

    前端大厂最新面试题-bubbleSort.docx

    其思想就是在每次遍历一遍未排序的数列之后,将一个数据元素浮上去(也就是排好了一个数据),如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 二、冒泡排序的实现 要实现一个从小到大的...

    c# 写的BubbleSort

    C# BubbleSort int temp = 0; bool noswap = false; while(!noswap) { for (int i = 0; i ; i++) { if (iArray[i] &gt; iArray[i + 1]) { temp = iArray[i]; iArray[i] = iArray[i + 1]; iArray[i + 1] = ...

    开发人员面试常问类型.pdf

    在面试中,面试官可能会问到各种数据结构和算法问题,例如: * 冒泡排序:冒泡排序是一种简单的排序算法,通过不断比较和交换元素来排序。 * 二分查找:二分查找是一种快速查找算法,通过不断缩小查找范围来找到...

    BubbleSort

    自己写的排序算法,Bubble排序,vc++ 6.0上调试通过

    BubbleSort-BubbleSort

    BubbleSort-BubbleSort

    BubbleSort.7z

    冒泡排序(Bubble Sort)是一种基础的排序算法,它的主要思想是通过重复遍历待排序的元素列表,比较相邻的元素并根据需要交换它们的位置,直到列表中的所有元素都按照升序或降序排列。这个过程就像水底下的气泡一样...

    Documents_bubblesort_

    标题 "Documents_bubblesort_" 暗示了这个压缩包包含的是关于冒泡排序(Bubble Sort)的编程作业,可能是用C语言编写的。描述中提到 "C语言编程作业,实现冒泡算法zsbd" 表明这个项目的核心是编写一个冒泡排序的程序...

    .net面试企业常问问题

    .NET 面试企业常问问题 .NET 是微软公司推出的一个软件框架,用于开发Windows应用程序、Web应用程序和移动设备应用程序。下面是关于 .NET 的一些常见面试问题和答案: 1. 什么叫 SQL 注入?如何防止? SQL 注入是...

    BubbleSort:BubbleSort算法在C语言中的实现

    C中的BubbleSort BubbleSort算法的C语言实现这个版本生成一个随机整数数组,并在bubbleSort算法中打印每次通过,以使其步骤非常清晰。 使用它包括拉出存储库并进入C目录。 在这里,您将找到一个已经完成所有设置的...

    java面试中的算法

    根据给定的信息,我们可以提取并总结出几个与Java面试中常见的算法相关的知识点: ### 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序...

    C#实现bubbleSort.rar

    C#实现bubbleSort.rar

    C++实现bubbleSort.rar

    C++实现bubbleSort.rar

    C语言实现bubbleSort.rar

    C语言实现bubbleSort.rar

    改进的冒泡算法(BubbleSort)

    冒泡排序(Bubble Sort)是一种基础的排序算法,它的基本思想是通过不断地比较相邻元素并交换位置,使得每一轮遍历后,最大(或最小)的元素“浮”到数组的一端,以此类推,直到整个数组排序完成。在原始的冒泡排序...

    06 BubbleSort.zip

    **标题解析:** "06 BubbleSort.zip" 这个标题暗示了压缩包中的内容主要涉及排序算法,特别是冒泡排序。冒泡排序是一种基础的、简单直观的排序算法,适用于初学者理解排序的基本概念。 **描述分析:** 描述提到...

    冒泡排序 BubbleSort.rar

    在提供的压缩包文件"BubbleSort.rar"中,很可能包含了演示冒泡排序算法的C#源代码示例,你可以通过解压并运行这些代码来更直观地理解冒泡排序的工作原理。通过阅读和分析这些代码,你可以学习如何在实际项目中运用...

    大数据技术之高频面试题(doc版).docx

    public static int binarySearch(int[] arr, int left, int right, int findVal) { if (left &gt; right) // 递归退出条件,找不到,返回-1 return -1; int midIndex = (left + right) / 2; if (findVal [midIndex...

    冒泡排序 BubbleSort

    冒泡排序(Bubble Sort)是一种基础且经典的排序算法,它通过重复遍历待排序的数列,依次比较相邻元素并根据需要交换它们的位置,来达到将较大的元素逐渐“冒”到数列末尾的效果。这个过程就像水底下的气泡一样,...

    BubbleSort_Go_Go冒泡排序_

    这个算法的名字由来是因为越小的元素会经过交换慢慢“浮”到数列的顶端,就像水中的气泡最终会上浮到水面一样。 在Go语言中实现冒泡排序,我们可以利用其强大的语法特性,例如切片(slice)和for循环。下面我们将...

    HW1_BubbleSort.zip

    在这个“HW1_BubbleSort.zip”压缩包中,我们可以看到一个使用C#语言实现的Winform应用程序,该程序演示了如何在用户界面中实现冒泡排序算法。 1. **C# Winform基础**: - Winform是.NET框架下的一个组件,用于...

Global site tag (gtag.js) - Google Analytics