各位好,今天我们来介绍一下一维数组的冒泡排序与二分查找。
冒泡排序
首先,我们通过for语句来输入数据到我们确定好的数组中。
int i,a[10];
for (i=0;i<10;i++)
{
cin >> a[i];
}
接下来通过双重循环对该数组进行冒泡排序。
int t=0,j;
//外循环控制总循环次数,确保循环结束后全部按顺序排出
for (i=1;i<10;i++)
{
//内循环通过if语句判断相邻两数字的值并修正顺序
for (j=i-1;j>=0;j--)
{
//这里的小于号可以确保数组元素逐渐变大
if (a[j+1]<a[j])
{
//变量t可暂时储存数组元素的值
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
else
break;
}
}
第一步已经完成了,接下来我们使用二分查找法找输入的数字。
二分查找
int num;
cout << "请输入要二分查找的数字";
cout << endl;
cin >> num;
//分别定义最低数字与最高数字的数组下标
//up表示前,down表示后
int up=0;
int down=9;
int mid=(up+down)/2;
//若前边的数字小于后边的数字以及中值与找的数字不等时
while (up<down && a[mid]!=num)
{
//如果中值大于找的值
if (a[mid]>num)
down=mid-1;
//如果中值小于找的值
if (a[mid]<num)
up=mid+1;
//将中值变得与找的值更近
mid=(up+down)/2;
}
//当中值与找的数字相等时,循环结束
if (a[mid]=num)
{
cout << "该数字在第";
cout << mid+1;
cout << "位置";
}
else
{
cout << "找不到该数字!";
}
接下来将两部分拼接起来并补充一下细节即可。
#include<iostream>
#define N 10
using namespace std;
int main()
{
int a[N];
cout << "输入待排序的十个数字:";
cout << endl;
int i;
for (i=0;i<N;i++)
{
cin >> a[i];
}
int t=0,j;
for (i=1;i<N;i++)
{
for (j=i-1;j>=0;j--)
{
if (a[j+1]<a[j])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
else
break;
}
}
cout << "排序后的数组是:";
for (i=0;i<N;i++)
{
cout << a[i];
cout << " ";
}
cout << endl;
int num;
cout << "请输入要二分查找的数字";
cout << endl;
cin >> num;
int up=0;
int down=N-1;
int mid=(up+down)/2;
while (up<down && a[mid]!=num)
{
if (a[mid]>num)
down=mid-1;
if (a[mid]<num)
up=mid+1;
mid=(up+down)/2;
}
if (a[mid]=num)
{
cout << "该数字在第";
cout << mid+1;
cout << "位置";
}
else
{
cout << "找不到该数字!";
}
return 0;
}
有关一维数组的冒泡排序与二分查找就介绍到这里。