冒泡排序和选择排序
冒泡排序:
对N个整数(数据由键盘输入)进行升序排列。
解题思路:输入N个整数利用数组储存,利用for循环判断前后两数的大小,前面的数大于后面的数则交换位置,经过一次循环后最大的数就会到最后一位,下次循环只需进行除去最后一个数的其他数判断交换位置即可。利用循环嵌套即可实现冒泡排序。排序完根据要求的输出格式输出排序后的N个整数。一共N个整数,排序一次可以少排序一个整数,所以外层循环要进行N-1次。,内层环迅只要给N-1-i个整数排序。


代码:
#include<iostream>
#include<iomanip>
#define N 7
using namespace std;
int main()
{
int i,j,a[N],n=0;
cout<<"请为数组元素赋值:"<<endl;
for(i=0;i<N;i++)
cin>>a[i];
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{
if(a[j]>a[j+1])
{
int temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
cout<<"经过交换后的数组元素为:"<<endl;
for(i=0;i<N;i++)
{
n++;
cout<<a[i]<<" ";
if(n%5==0)
cout<<endl;
}
return 0;
}
拓展:
选择排序:
思路:外层循环从数组第一个元素开始,内层循环从每次外层循环的后面一个元素开始,判断a[i]与a[j]的大小,符合条件就交换位置,外层循环每次循环都可以将最小的数放在a[i],i++后,再对后面的其余数字继续排序。
代码:
#include<iostream>
#include<iomanip>
#define N 7
using namespace std;
int main()
{
int i,j,a[N],n=0;
cout<<"请为数组元素赋值:"<<endl;
for(i=0;i<N;i++)
cin>>a[i];
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N;j++)
{
if(a[j]<a[i])
{
int temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
cout<<"经过交换后的数组元素为:"<<endl;
for(i=0;i<N;i++)
{
n++;
cout<<a[i]<<" ";
if(n%5==0)
cout<<endl;
}
return 0;
}

该题体会:可以利用宏定义不修改代码直接实现某个数字的改变,了解了冒泡排序和选择排序的原理

浙公网安备 33010602011771号