《ASCE1885的源码分析》の基于冒泡排序的二分查找模板

本文介绍了一种结合冒泡排序与二分查找算法的实现方案。通过模板化代码支持多种数据类型,包括整型数组、字符数组及字符串数组的排序与查找。提供了详细的代码示例与运行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

##########################################################################

ASCE1885的声明:本文源代码归属于:

author: Gonzales Cenelia

homepage: www.ai-search.4t.com

有增改!

##########################################################################

本代码实现二分查找的功能,查找前对数组排序使用的是冒泡排序算法。使用的开发环境是Dev C++ 4.9.9.2

程序头文件是bisearch.h,实现了程序的主体功能:

namespace ASCE1885 {

//二分查找函数,注意参数array中的元素是排好序的

template <typename T>

int biSearch(int low, int high, T *array,

T search, int (*comp)(T a, T b))

{

int mid = 0;

while(low <= high)

{

mid = (low + high)/2;

if(comp(array[mid], search) == 0) //等于要找的数

{

return mid;

} else if(comp(array[mid], search) < 0) {

low = mid + 1;

} else {

high = mid - 1;

}

}

return -1;

}

//交换函数

template <typename T>

void swap(T &a, T &b)

{

T temp = a;

a = b;

b = temp;

}

//比较函数

template <typename T>

int comp(T a, T b)

{

if(a == b)

return 0;

else if(a > b)

return 1;

return -1;

}

//冒泡排序

template <typename T>

void bubbleSort(T *array, size_t arraySize, int (*comp)(T a, T b))

{

int cmpResult;

for(int i=arraySize-1; i>0; --i)

{

for(int j=0; j<i; ++j)

{

cmpResult = comp(array[j], array[j+1]);

if(cmpResult > 0)

{

swap(array[j], array[j+1]);

}

}

}

}

}

调用上面函数的文件是Template Binary Search.cpp

#include <iostream>

#include <string>

#include "bisearch.h"

using namespace ASCE1885;

int _comp(char *a, char *b);

template<typename T>

void print_array(T *array, size_t array_size)

{

for(int i = 0; i < array_size; ++i)

{

std::cout << " " << array[i] << std::endl;

}

}

void example1();

void example2();

void example3();

int main()

{

example2();

system("pause");

return 0;

}

int _comp(char *a, char *b)

{

return strcmp(a, b);

}

void example1()

{

int array[] = {-1, 7, 9, 0, 17, 13, 73};

int array_size = sizeof(array)/sizeof(array[0]);

bubbleSort<int>(array, array_size, comp);

std::cout << "Array elements:/n";

print_array(array, array_size);

std::cout << "/nBinary Search/n";

std::cout << " search: 13/n";

std::cout << " search result: " << biSearch<int>(0, array_size, array, 13, comp);

std::cout<<std::endl;

}

void example2()

{

char array[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};

int array_size = sizeof(array)/sizeof(array[0]);

std::cout << "Array elements:/n";

print_array(array, array_size);

std::cout << "/nBinary Search:/n";

std::cout << " enter your search: ";

char search;

std::cin >> search;

std::cout << " search result: " << biSearch<char>(0, array_size, array, search, comp);

std::cout<<std::endl;

}

void example3()

{

char *array[] = {"Michelle", "Laetitia", "Cindy", "Christina", "Monica", "Claudia"};

int array_size = sizeof(array)/sizeof(array[0]);

std::cout << "/nArray elements /n/nbefore sorting:/n";

print_array(array, array_size);

bubbleSort(array, array_size, _comp);

std::cout << "/nafter:/n";

print_array(array, array_size);

std::cout << "/nBinary Search/n";

std::string search = "Claudia";

std::cout << " search: " << search;

std::cout << "/n search result:= " << biSearch(0, array_size, array, (char*)search.c_str(), _comp);

std::cout<<std::endl;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值