冒泡排序:每一次循环,将数组a[n]中每两个元素看成一组,比较其大小,小的放在前面,大的在后面,第一次比较,数组中最大的元素被移到数组最后一位,第二次只需比较前面n-1位即可,依次循环下去。
二分查找法:一组有序的数组a[n],需要查找数值为num的值在数组中的位置,将数组从中间分为两部分,每次将num与数组中间的元素值进行比较,若小于该中间值,将左边数组看成一个新的数组,继续比较,若大于该中间值,则将右边数组看成一个新的数组,相等则返回该中间值,循环结束。
以下是实现的源代码:
#include "stdafx.h"
#include "iostream"
#include "math.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a[100];
int i,j,k;
int flag;
//计算整型数组的元素个数
j=sizeof(a)/sizeof(int);
//生成随机数
for (i=0;i<j;i++)
{
a[i]=int(rand()%1000);
}
//冒泡排序
for (i=0;i<j-1;i++)
{
for (k=0;k<j-i-1;k++)
{
if (a[k]>a[k+1])
{
flag = a[k];
a[k] = a[k+1];
a[k+1] = flag;
}
}
}
//打印出有序的数组a
for (i=0;i<j;i++)
{
cout<<a[i]<<endl;
}
//二分查找法,查找n在a数组中的位置下标
int n;
cout<<"Please input a integer n:"<<endl;
cin>>n;
int s = 1;
int left = 0;
int right = j-1;
while(s)
{
int middle = (left + right)/2;
if (n == a[middle])
{
//s为循环结束判断符
s = 0;
cout<<middle;
}
else if (n<a[middle])
{
right = middle-1;
}
else
{
left = middle + 1;
}
}
system("pause");
return 0;
}