如何解决C++中查找与排序的面试题

这篇文章将为大家详细讲解有关如何解决C++中查找与排序的面试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

成都创新互联是一家集网站建设,南安企业网站建设,南安品牌网站建设,网站定制,南安网站建设报价,网络营销,网络优化,南安网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

题目:

    旋转数组的最小数字

    把一个数组最开始的若干个元素搬到数组的末尾,输入一个递增排序的数组的一个旋转,输出旋转数字的最小元素。

    例:{2,3,4,0,1}是{0,1,2,3,4}的旋转,该数组最小值为0

程序1.0

    失败的程序,从头遍历一遍,时间复杂度O(N),这个思路没有利用输入旋转数组的特性,随便实现了但是却是失败的

int MinNum(int* array, int length)
{
	int cur = array[0];
	for (int i = 1; i < length; i++)
	{
		if (array[i]

程序2.0

    方法类似于二分查找

int MinNum(int* array, int length)
{
        assert(array);
        assert(length>0);
	int left = 0;
	int right = length - 1;
	int mid = left;//初始化为0,这样若旋转了0个元素则直接返回
	
	while (array[left] >= array[right])//数组为旋转后数组
	{
		
		if (right - left == 1)
		{
			mid = right;
			break;
		}
		mid = (left + right) / 2;
		if (array[mid] >= array[left])
		{
			left = mid;
		}
		else if (array[mid] <= array[right])
		{
			right = mid;
		}
	}
	return array[mid];

}
//在第一次检测时发现怎么跑都是返回的第一个元素的值,后来检测时发现是在while循环块中在定义mid时在前面不小心加了个int,这使得这个mid为这个块的局部变量,出了这个循环后就被丢弃

程序3.0

    在2.0中有考虑不完善的地方,若数组为{1,0,1,1,1}或者为{1,1,1,0,1},其左右和中间都是1,无法移动两个指针来缩小查找范围,因而不得不采取顺序查找的方法

int MinInOrder(int *array,int left,int right)
{
	int ret = array[left];

	for (int i = left + 1; i <= right; i++)
	{
		if (ret>array[i])
		{
			ret = array[i];
		}
	}
	return ret;

}
int MinNum(int* array, int length)
{
	assert(array);
	assert(length > 0);

	int left = 0;
	int right = length - 1;
	int mid = left;
	
	while (array[left] >= array[right])
	{
		
		if (right - left == 1)
		{
			mid = right;
			break;
		}
		mid = (left + right) / 2;
		if (array[left] == array[right] && array[left] == array[mid])
		{
			return MinInOrder(array, left, right);
		}
		if (array[mid] >= array[left])
		{
			left = mid;
		}
		else if (array[mid] <= array[right])
		{
			right = mid;
		}
	}
	return array[mid];

}

测试

void test()
{
	int a[10] = { 8,9,10,11,1,2,3,4,5,6 };
	cout<

关于“如何解决C++中查找与排序的面试题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


当前标题:如何解决C++中查找与排序的面试题
分享URL:http://cdiso.cn/article/jijhog.html

其他资讯