[C++] 纯文本查看 复制代码#include
#include
#include
#include
#define MAX_ELEMENT_SIZE 1000
#define N 500
int g_nCount = 0;
typedef struct array
{
int *arr;
int len;
}array;
namespace wind_test
{
// 排序
int sort(struct array *pArray)
{
if (pArray == nullptr || pArray->arr == nullptr)
return -1;
int temp;
for (int i = 0; i < pArray->len - 1; i++)
{
for (int j = i + 1; j < pArray->len; j++)
{
if (pArray->arr[i] > pArray->arr[j])
{
temp = pArray->arr[i];
pArray->arr[i] = pArray->arr[j];
pArray->arr[j] = temp;
}
}
}
return 0;
}
// 顺序查找
int order_search(struct array *pArray, int key)
{
if (pArray == nullptr || pArray->arr == nullptr)
return -1;
g_nCount = 0;
// 暴力搜索即可
for (int i = 0; i < pArray->len; i++)
{
++g_nCount;
if (pArray->arr[i] == key)
return i;
}
return -1;
}
// 折半查找
int bin_search(struct array *pArray, int key)
{
if (pArray == nullptr || pArray->arr == nullptr)
return -1;
g_nCount = 0;
int low = 0;
int mid = 0;
int high = pArray->len-1;
while(low <= high)
{
++g_nCount;
// 分成两半
mid = (low+high) / 2;
// 如果刚好是就返回
if(key == pArray->arr[mid])
return mid;
// 如果大于就找右边
else if(key > pArray->arr[mid])
low = mid+1;
// 如果小于就找左边
else
high = mid-1;
}
return -1;
}
// 初始化线性表
struct array *create_arr()
{
// new出线性表
struct array *pArray = new array;
if (pArray == nullptr)
{
printf("aa\n");
return nullptr;
}
memset(pArray, 0, sizeof(struct array));
// new出1000个元素
pArray->arr = new int[MAX_ELEMENT_SIZE];
if (pArray->arr == nullptr)
{
printf("bb\n");
delete pArray;
pArray = nullptr;
return nullptr;
}
memset(pArray->arr, 0, MAX_ELEMENT_SIZE);
// 放入元素
for (int i = 0; i < MAX_ELEMENT_SIZE; i++)
pArray->arr[i] = rand() % MAX_ELEMENT_SIZE;
pArray->len = MAX_ELEMENT_SIZE;
return pArray;
}
void destroyResource(struct array *pArray)
{
if (pArray == nullptr || pArray->arr == nullptr)
return;
delete []pArray->arr;
pArray->arr = nullptr;
delete pArray;
}
}
int main(void)
{
srand((unsigned int)time(nullptr));
struct array *pArray;
pArray = wind_test::create_arr();
printf("创建线性表,排序之前:\n");
for (int i = 0; i < MAX_ELEMENT_SIZE; i++)
printf("%d ", pArray->arr[i]);
printf("\n");
wind_test::sort(pArray);
printf("排序之后:\n");
for (int i = 0; i < MAX_ELEMENT_SIZE; i++)
printf("%d ", pArray->arr[i]);
printf("\n");
printf("顺序查找结果如下:\n");
int index;
if ((index = wind_test::order_search(pArray, N)) != -1)
printf("存在该元素,下标 = %d\n", index);
else
printf("不存在该元素\n");
printf("顺序查找遍历次数 = %d\n", g_nCount);
printf("折半查找结果如下:\n");
if ((index = wind_test::bin_search(pArray, N)) != -1)
printf("存在该元素,下标 = %d\n", index);
else
printf("不存在该元素\n");
printf("折半查找遍历次数 = %d\n", g_nCount);
wind_test::destroyResource(pArray);
pArray = nullptr;
return 0;
}