c++实现顺序查找,折半查找
2017-07-21 16:40
369 查看
#include<stdio.h> #include<iostream> using namespace std; #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define ElemType int typedef struct{ ElemType *elem; int length; int listsize; }SqList; //建顺序表 void InitList_Sq(SqList &L) { L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (!L.elem) cout << "存储分配失败!" << endl; L.length = 0; L.listsize = LIST_INIT_SIZE; } //在第i位置插入元素e void ListInsert_Sq(SqList &L, int i,ElemType e) { int *newbase; if (i<1 || i>L.length + 1) cout << "位置错误!" << endl; if (L.length >= L.listsize) { newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT)*sizeof(ElemType)); if (!newbase) cout << "重新分配地址错误!" << endl; L.elem = newbase; L.listsize += LISTINCREMENT; } int *p, *q; q = &(L.elem[i - 1]); for (p = &(L.elem[L.length - 1]); p >= q; --p) //将第i位置及其以后的元素后移一个位置 *(p + 1) = *p; *q = e; ++L.length; } //比较两个元素是否相等 int EQ(int a, int b) { if (a == b) return 1; else return 0; } //顺序查找 void Search_Sq(SqList L, ElemType key) { int *p,i=1; p = L.elem; while (i <= L.length && L.elem[i-1]!=key) ++i; if (i > L.length-1) cout << "不存在元素" << key << endl; else cout <<"顺序查找:元素"<< key << "的位置是:" << i << endl; } //折半查找 void Search_Bin(SqList L, ElemType key) { int low, high, mid; low = 0; high =L.length - 1; while (low <high) { mid = (low + high) / 2; if (EQ(key,L.elem[mid])) { cout << "折半查找:元素" << key << "的位置为:" << mid + 1 << endl; break; } else if (key < L.elem[mid]) { high = mid - 1; } else { low = mid + 1; } } } void PrintL(SqList &L) { int i = 0; while (i < L.length) { cout << L.elem[i]<<" "; i++; } cout << endl; } void main() { SqList L; //创建顺序表La并插入数据 InitList_Sq(L); ListInsert_Sq(L, 1, 12); ListInsert_Sq(L, 2, 25); ListInsert_Sq(L, 3, 39); ListInsert_Sq(L, 4, 56); ListInsert_Sq(L, 5, 78); ListInsert_Sq(L, 6, 80); ListInsert_Sq(L, 7, 86); ListInsert_Sq(L, 8, 88); ListInsert_Sq(L, 9, 91); ListInsert_Sq(L, 10, 95); ListInsert_Sq(L, 11, 98); ListInsert_Sq(L, 12, 99); cout << "La的元素为:"; PrintL(L); //顺序查找 Search_Sq(L, 91); //折半查找 Search_Bin(L, 91); //防止运行结果一闪而过 system("pause"); }
相关文章推荐
- 顺序表创建以及查找排序算法(含有顺序查找算法、带哨兵站顺序查找、折半查找算法、冒泡排序)的C++实现在vs2013环境下实现
- 十.用C语言实现查找算法 (1)顺序查找;(2)二分查找(折半查找);(3)二叉排序树;(4)哈希查找
- 静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
- C++实现顺序表的常用操作(插入删出查找输出)
- C/C++查找之一(顺序查找、折半查找(二分查找))
- 静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
- 《算法导论》中的查找任意顺序值的C++实现
- Java实现三种常用的查找算法(顺序查查找,折半查找,二叉排序树查找)
- 顺序查找、折半查找、引索顺序表查找的实现
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- C++实现查找数组中的值
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 如何在Android源码里查找Java中native方法对应的C++实现
- 顺序表用c++实现的例子
- C++实现查找汉字拼音首字母
- 顺序表求集合交并——C++实现
- C语言实现顺序表的插入、删除、查找、遍历等基本操作
- C++实现静态顺序表的增删查改以及初始化
- 用C++实现一个哈希表(插入,删除,查找)
- c/c++实现广义表及其深度查找