目录:
- 选择排序
- 选择排序的代码
- 选择排序的解释
- dev c++环境下的运行
- 选择排序的解释
- 选择排序的代码
#选择排序的代码
#include<stdio.h>
main()
{
int a[5],i,j,t,k;
printf("请输入5个数字:");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<4;i++)
{
k=i;
for(j=i+1;j<5;j++)
{
if(a[k]>a[j])
k=j;
}
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(i=0;i<5;i++)
printf("%d\n",a[i]);
}
选择排序先进行比较,只改变数组下标,不交换位置
一轮循环后再改变数组内元素的位置
例如:
5 1 3 2 0
比较:
首先i=0,k=0,j=1,5>2,所以k=1
然后j++,j=2,5>3,所以k=2以此类推一轮下来k=4
接下循环k不等于i,则进行交换,a[[4]]=5,a[[0]]=0
得到0 1 3 2 5
接着i=1,k=1,j=2;a[[1]]不大于a[[2]],不进行交换
接着i=2,k=2,j=3;a[[2]]>a[[3]],3>2,k=3
接下来进行交换 k不等于i,则进行交换,a[[3]]=3
则得到0 1 2 3 5
即排序完成。
dev c++环境下的代码:
结果:
目录:
- 冒泡排序
- 冒泡排序的代码
- 冒泡排序的解释
- dev c++环境下的运行
- 冒泡排序的解释
- 冒泡排序的代码
#冒泡排序的代码:
#include<stdio.h>
main()
{
int a[5],i,j,t;
printf("请输入5个数字:");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<6;i++)
{
for(j=0;j<5-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<5;i++)
printf("%d\n",a[i]);
}
*冒泡排序先进行比较,如果符合条件,直接进行交换
例如
5 1 3 4 2
首先i=0,j=0,a[[0]]>a[[1]],所以进行交换,得到1 5 3 4 2
继续j++,j=1,a[[1]]>a[[2]],所以进行交换,得到1 3 5 4 2
以此类推,一轮比较得到 1 3 4 2 5
接下来 i++,i=1,j=0,a[[0]]不大于a[[1]] 不进行交换
j=1,a[[1]]不大于a[[2]],j++,a[[2]]>a[[3]],经过交换得到1 3 2 4 5
j<i-1的原因是,上一轮已经排好了最后末尾最大的数,可以减少循环次数
接下来继续进行,以此类推,得到 1 2 3 4 5