选择排序
选择排序的思想:将无序列的数列中最小的元素放在第一位,再继续将除了之前被放进去过的元素之外的其他元素中选出最小的放到第二位。
文字语言来叙述算法,较为繁琐且无力,接下来图
均以14 7 23 31 40 56 78 9 2为输出数列
//可以把红色的线想象成一堵墙,每轮排序不需要考虑红墙往左的元素
#include <stdio.h>
#define N 9
int main()
{
int a[N];
int i,j;
int k,t;
for(i=0;i<N-1;i++)//变量i代表轮数,每轮确定一个未排序数列的最小值
{
scanf("%d",&a[i]);
}
for(i=0;i<N;i++)
{
k=i;
for(j=i+1;j<N;j++)//j=i+1表示从未知序列的第一个开始
{
if(a[j]<a[k])
k=j;
}
t=a[i];
a[i]=a[k];//t为中间变量
a[k]=t;
}
for(i=0;i<N;i++)
printf("%d ",a[i]);
return 0;
}
冒泡排序
冒泡排序的核心是相邻元素交换值,而交换的原则是前面的数比后面大或者小。
每一轮都要做相邻元素的比较、交换。
#include <stdio.h>
#define N 9
int main()
{
int a[N];
int i,j,t;
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<N;i++)//最多N-1轮相邻换位
{
for(j=N-1;j>0;j--)//相邻换位
{
if(a[j]<a[j-1])
{
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
}
}
for(i=0;i<N;i++)
{
printf("%d ",a[i]);
}
return 0;
}
如果有什么问题,欢迎大家指正哦!