数据结构主要涉及查找、插入、删除的时间复杂度(效率)和空间复杂度(内存开销)。我拟写一系列相关文档,总结所学,做好mark,以备后查。也顺便供大家学习、参考、交流。
参考编程语言的惯例,由简至难,从数组开篇。毕竟,数组-大家耳熟能详,使用率也相当高。
数组适用场景
- 数据量不大
- 数量可预估
数组分类
- 有序数组 (数据元素按从小到大或从大到小排列)
- 无序数组
无序数组没有规律,它的查找、删除、插入只能线性进行。本文主要针对有序数组进行展开:
有序数组查找算法
二分法
大家对二分法耳熟能详,这里不罗嗦,直接贴上代码(包括递归和迭代两种编码形式)
/*二分法查找有序数组中的元素*/
/* 递归实现二分查找,查找成功返回所在数组下标,否则返回-1 */
int BinarySearchRecursion(int* pData, int nLow, int nHigh, int nVal)
{
if (nLow > nHigh)
return -1;
int nMid = (nLow + nHigh) / 2;
if (pData[nMid] == nVal)
return nMid;
if (pData[nMid] > nVal)
{
nHigh = nMid - 1;
return BinarySearchRecursion(pData, nLow, nHigh, nVal);
}
if (pData[nMid] < nVal)
{
nLow = nMid + 1;
return BinarySearchRecursion(pData, nLow, nHigh, nVal);
}
ret