比较常用的排序方法分别是:插入排序,选择排序,冒泡排序(最近正好在学习这几种方法)
1.选择排序
思路:①认定一个数为最大数(或者最小数)-> ②找出最大(或者最小数)-> ③交换找出的最大数(或者最小数)与认定的最大数-> ④遍历所有数据
实例:
//选择排序
#include<iostream>
using namespace std;
void swap1(int *a ,int *b);
int main()
{
int a[5];
for(int i=0;i<5;i++)
{
cin>>a[i];
}
//以上部分为输入测试数据,这里以整型数据数组为例
for(int i=0;i<5;i++)
{
int max=a[i]; //认定最大数
int index=i; //记录序号
for(int k=i+1;k<5;k++)
{
if(max<a[k])
{
max=a[k];
index=k;
}
} //内层循环为找出最大数
cout<<max<<' '; //输出目前最大数
swap1(&a[i],&a[index]); //交换认定最大数与找出最大数的位置
}
}
void swap1(int *a ,int *b) //数据交换函数
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
2.插入排序
思路:①确定第一个要排序的数 -> ②确定要排序数的位置
实例:
//插入排序
#include<iostream>
using namespace std;
int main()
{
int a[5];
for(int i=0;i<5;i++)
{
cin>>a[i];
}
for(int i=1;i<5;i++)
{
int temp=a[i]; //提取需要比较元素
int k=i-1; //需要比较元素往前一个元素的位置,后续再往前比较
for(;k>=0 && temp<a[k];k--)
{
a[k+1] = a[k]; //比temp大的数往后挪位置
}
a[k+1]=temp; //将temp放置于正确位置
}
for(int i=0;i<5;i++)
{
cout<<a[i]<<' ';
}
}
3.冒泡排序
思路:①比较相邻两个元素 -> ②按照大小交换位置或者不交换 -> ③n个元素需要n-1轮比较与交换
实例:
//冒泡排序
#include<iostream>
using namespace std;
void swap1(int *a, int *b);
int main()
{
int a[5]; //
for(int i=0;i<5;i++)
{
cin>>a[i];
}
for(int i=1;i<5;i++) //控制总循环次数
{
for(int j=0;j<5-i;j++) //控制单次比较次数
{
if(a[j]>a[j+1])
swap1(&a[j],&a[j+1]); //元素比较
}
}
for(int i=0;i<5;i++)
{
cout<<a[i]<<' ';
}
}
void swap1(int *a, int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容