冒泡排序法和二分查找法(C/C++)

目录

1  冒泡排序法

2  二分查找法


1  冒泡排序法

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

#include 
using namespace std;
int a[99999];
int n; 
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=0;i>a[i];
	}
	for(int i=0;i

下面列举一道冒泡排序的原理题:

冒泡排序法和二分查找法(C/C++)_第1张图片

考虑冒泡排序的复杂度,对于拥有N个字母的字符串,最多需要交换N*(N-1)/2次(完全乱序时) 易知N=15时,有15*14/2=105,即满足100次交换所需的最短字符串有15个字母。 要求字典序最小,那么显然要取a~o这15个字典序最小的字母逆向思考,目标字符串经过100次交换后,得到正序字符串abcdefghijklmno,而完全逆序的字符串onmlkjihgfedcba变成正序字符串需要105次交换,那么将完全逆序的字符串交换5次后,便能得到答案。 而要求字典序最小,那么将j交换5次提到字符串最前面,就得到了最小的情况 

2  二分查找法

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

#include 
using namespace std;
int a[99999],l,r,mid,n,target;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	cin>>target;
	l=1;
	r=n;
	while(l<=r)
	{
		mid=(l+r)/2;
		if(a[mid]>target)  r=mid-1;
		if(a[mid]==target)
		{
			cout<

你可能感兴趣的:(算法,蓝桥杯,二分查找法,冒泡排序法,c)