基础排序算法

标签: 编程基础 算法 排序 java

  编程中经常遇到的基础算法中不外乎是顺序查找,二分查找,哈希表查找,二叉排序树查找几种。下面详细总结一下这几种排序。

1. 顺序查找

  顺序查找是最简单的查找算法。思想是从第一个元素开始,一个一个往下比较,找到与键值匹配的元素即可返回。可以实施在链表或者数组上。在此不展开描述。
  平均 复杂度为O(n)
  

2. 二分查找

  二分查找也称折半查找,是指在有序数组中展开查找,每次选取有序数组中间元素进行比较,找到与键值匹配的元素即可返回。如果键值比中间元素小,则往中间元素前面的元素找,反之则往右边的元素找。
  算法复杂度O(log n)。
  
  二分查找可用简单的递归代码解决。

public static int binSearch(int[] array, int key, int begin, int end){
    if(begin >= end) return -1;
    int middle = (begin + end) / 2;
    if(array[middle] == key) return middle;
    else if(array[middle] > key) 
        return binSearch(array, key, begin, middle - 1);
    else 
        return binSearch(array, key, middle + 1, end);
}

  非递归解决方法,用循环实现即可。

public static int binSearch(int[] array, int key){
    if(array == null || array.length == 0) return -1;
    int begin = 0, end = array.length - 1;
    while(begin < end){
        int middle = (begin + end) / 2;
        if(array[middle] == key) return middle;
        else if(array[middle] > key) end = middle - 1;
        else begin = middle + 1;
    }
    return -1;
}

 
  

3. 哈希查找

  算法复杂度O(1)。
  哈希查找是在hash表建立好的基础上,对给定key来查找对应value的查找算法。首先,对于给定的key值,使用Hash(key)来计算该key值在hash表上的位置,根据下标即可查出对应值。
  如果所有key对应的value值都唯一地散列在hash表中,上面的描述是成立的。但是hash表的存储数据时会发生冲突的情况,如果是发生过冲突的,value的散列并不唯一。所以根据Hash(key)作为下标并不完美,还要根据是否冲突了来作判断,具体要看该hash表使用了哪一种冲突处理机制。
  

4. 二叉排序树查找

  待续

posted @ 2017-03-19 11:32  斑鱼  阅读(190)  评论(0编辑  收藏  举报