目录
1.选择排序法
实现思路
先将首元素与余下的所有元素进行比较,然后将满足条件的最小(大)值放在首位,接着再将第二个元素与余下的所有元素进行比较,满足条件的那个最小(大)值就放在第二个位置,以此类推,重复上述操作,总共要进行n-1次主循环。
实例讲解
已知一个数组a[5]={3,5,4,1,2},请将该数组元素进行从小到大的排序。
第一步:先让a[0]与a[1],a[2],a[3],a[4]进行比较,比较之后将最小的数放在首位 ,也就是a[0]的位置。
第二步:接着让a[1]与a[2],a[3],a[4}进行比较,然后将这几个数比较之后的最小值放在第二个位置,也就a[2的位置。
第三步:依此类推,直到循环结束为止。
代码(从小到大进行排序)
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i]; //输入数组数据
for(int i=0;i<n-1;i++) //主循环n-1躺
{
for(int j=i+1;j<n;j++)
{
if(a[j]<a[i]) //不满足条件则实行交换
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(int i=0;i<n;i++)
cout<<a[i]<<endl; //输出数组从小到大进行排序的数据
return 0;
}
2.冒泡排序法(相邻交换)
实现思路
从首元素开始相邻的元素进行两两比较,满足条件的则数据保持不动,不满足条件的需要交换这两个数,依此直到最后一个数,总共进行n-1次主循环。
实例讲解
已知一个数组a[4]={3,5,4,1},请将该数组元素进行从小到大的排序。
第一步:将a[0]与a[1]进行比较,发现a[0]小于a[1],满足条件,则数据保持不动。
第二步:将a[1]与a[2]进行比较,发现a[1]大于a[2],不满足条件,则交换两个数,此时a[1]=4,a[2]=5.
第三步:依次进行两两比较,直到最后一个数。
代码(从小到大进行排序)
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i]; //输入数组元素
for(int i=0;i<n-1;i++) //主循环n-1躺
{
for(int j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1]) //不满足条件则交换
{
int t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
for(int i=0;i<n;i++)
cout<<a[i]; // 输出排序后的数组元素
return 0;
}
3.两种排序方法的联系与区别
联系
两种排序法,皆要进行n-1次主循环。
区别
从代码复杂度上看,冒泡排序法更简洁一点。
选择排序法更关注于位置,冒泡排序法更关注于数值。