• 冒泡排序和二分查找


     1. 冒泡排序

     冒泡排序的接口,代码清单如下:

     1 import java.util.Comparator;
     2 
     3 /**
     4  * 排序器接口(策略模式:将算法封装到具有共同接口的独立的类中使得他们可以相互替换)
     5  */
     6 public interface Sorter {
     7 
     8     /**
     9      * 排序
    10      * @param list 待排序的数组
    11      * @param <T>
    12      */
    13     public <T extends Comparable<T>> void sort(T[] list);
    14 
    15     /**
    16      * 排序
    17      * @param list 待排序的数组
    18      * @param comp 比较两个对象的比较器
    19      * @param <T>
    20      */
    21     public <T> void sort(T[] list, Comparator<T> comp);
    22 }

      冒泡排序的具体实现,代码清单如下:

     1 import java.util.Comparator;
     2 
     3 /**
     4  * 排序器接口(策略模式:将算法封装到具有共同接口的独立的类中使得他们可以相互替换)
     5  */
     6 public interface Sorter {
     7 
     8     /**
     9      * 排序
    10      * @param list 待排序的数组
    11      * @param <T>
    12      */
    13     public <T extends Comparable<T>> void sort(T[] list);
    14 
    15     /**
    16      * 排序
    17      * @param list 待排序的数组
    18      * @param comp 比较两个对象的比较器
    19      * @param <T>
    20      */
    21     public <T> void sort(T[] list, Comparator<T> comp);
    22 }

     2. 二分查找

     1 import java.util.Comparator;
     2 
     3 /**
     4  * 二分查找
     5  * Created by doudou on 2018/1/19.
     6  */
     7 public class BinarySearch {
     8 
     9     public static <T extends Comparable<T>> int binarySearch(T[] x, T key) {
    10         return binarySearch(x, 0, x.length - 1, key);
    11     }
    12 
    13     /**
    14      * 使用循环实现的二分查找
    15      * @param x
    16      * @param key
    17      * @param comp
    18      * @param <T>
    19      * @return
    20      */
    21     public static <T> int binarySearch(T[] x, T key, Comparator<T> comp) {
    22         int low = 0;
    23         int high = x.length - 1;
    24         while (low <= high) {
    25             int mid = (low + high) >>> 1;
    26             int cmp = comp.compare(x[mid], key);
    27             if (cmp < 0) {
    28                 low = mid + 1;
    29             } else if (cmp > 0) {
    30                 high = mid - 1;
    31             } else {
    32                 return mid;
    33             }
    34         }
    35         return -1;
    36     }
    37 
    38     /**
    39      * 使用递归实现的二分查找
    40      * @param x
    41      * @param low
    42      * @param high
    43      * @param key
    44      * @param <T>
    45      * @return
    46      */
    47     private static <T extends Comparable<T>> int binarySearch(T[] x, int low, int high, T key) {
    48         if (low <= high) {
    49             int mid = low + ((high - low) >> 1);
    50             if (key.compareTo(x[mid]) == 0) {
    51                 return mid;
    52             } else if (key.compareTo(x[mid]) > 0) {
    53                 return binarySearch(x, low, mid - 1, key);
    54             } else {
    55                 return binarySearch(x, mid + 1, high, key);
    56             }
    57         }
    58         return -1;
    59     }
    60 }
  • 相关阅读:
    中文句子相似度之計算與應用
    《The Elder Scrolls V: Skyrim》百般冷门却强力职业
    《老滚5 》买房、娶老婆详尽攻略
    关于组播239.255.255.250
    Windows事件ID大全
    事件查看器常见ID代码解释
    Windows路由表详解
    两种动态加载JavaScript文件的方法
    80后的你们还记得这些游戏吗
    谷歌和HTTPS
  • 原文地址:https://www.cnblogs.com/xinlichai0813/p/8317549.html
Copyright © 2020-2023  润新知