基础排序算法
标签: 编程基础 算法 排序 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. 二叉排序树查找
待续