写一个冒泡排序 二分查找、二分搜索

用Java写一个冒泡排序。 

答:冒泡排序几乎是个程序员都写得出来,但是面试的时候如何写一个逼格高的冒泡排序却不是每个人都能做到,下面提供一个

import java.util.Comparator;

public interface Sorter {

  /**

    * 排序

    * @param list 待排序的数组

    */

  public > void sort(T[] list);

  /**

    * 排序

    * @param list 待排序的数组

    * @param comp 比较两个对象的比较器

    */

  public void sort(T[] list, Comparator comp);

}


import java.util.Comparator;

/**

* 冒泡排序

* @author mch

*/

public class BubbleSorter implements Sorter {

    @Override

    public > void sort(T[] list) {

        boolean swapped = true;

        for (int i = 1, len = list.length; i < len && swapped; ++i) {

            swapped = false;

            for (int j = 0; j < len - i; ++j) {

                if (list[j].compareTo(list[j + 1]) > 0) {

                    T temp = list[j];

                    list[j] = list[j + 1];

                    list[j + 1] = temp;

                    swapped = true;

                }

            }

        }

    }

    @Override

    public void sort(T[] list, Comparator comp) {

        boolean swapped = true;

        for (int i = 1, len = list.length; i < len && swapped; ++i) {

            swapped = false;

            for (int j = 0; j < len - i; ++j) {

                if (comp.compare(list[j], list[j + 1]) > 0) {

                    T temp = list[j];

                    list[j] = list[j + 1];

                    list[j + 1] = temp;

                    swapped = true;

                }

            }

        }

    }

}


95、用Java写一个折半查找

折半查找,也称二分查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较

import java.util.Comparator;

public class MyUtil {

  public static > int binarySearch(T[] x, T key) {

      return binarySearch(x, 0, x.length- 1, key);

  }

  // 使用循环实现的二分查找

  public static int binarySearch(T[] x, T key, Comparator comp) {

      int low = 0;

      int high = x.length - 1;

      while (low <= high) {

          int mid = (low + high) >>> 1;

          int cmp = comp.compare(x[mid], key);

          if (cmp < 0) {

            low= mid + 1;

          }

          else if (cmp > 0) {

            high= mid - 1;

          }

          else {

            return mid;

          }

      }

      return -1;

  }

  // 使用递归实现的二分查找

  private static> int binarySearch(T[] x, int low, int high, T key) {

      if(low <= high) {

        int mid = low + ((high -low) >> 1);

        if(key.compareTo(x[mid])== 0) {

          return mid;

        }

        else if(key.compareTo(x[mid])< 0) {

          return binarySearch(x,low, mid - 1, key);

        }

        else {

          return binarySearch(x,mid + 1, high, key);

        }

      }

      return -1;

  }

}

你可能感兴趣的:(写一个冒泡排序 二分查找、二分搜索)