一:选择法排序
参考程序
#include<stdio.h>
int main(void){
int a[10];
puts("请输入10个实数:");
for(int i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
puts("您输入的是个数为:");
for(int j=0;j<10;j++)
{
printf("%d\t",a[j]);
}
int item,ipos;
/*从小到大排序算法*/
for(int m=0;m<9;m++)
{
item=a[m];
ipos=m;
for(int n=m+1;n<10;n++) //从后面的元素中选出最小值,记录数值和位置
{
if(a[n]<item)
{
item=a[n]; //交换
ipos=n;
}
}
a[ipos]=a[m]; //与第m个元素交换数值
a[m]=item;
}
puts("\n从小到大排序后,输出为:");
for(int k=0;k<10;k++)
{
printf("%d\t",a[k]);
}
}
第一次看书默写排序算法时候,把从后面的元素中找到的最小的元素与将要交换元素呼唤时(也就是参考代码中的交换代码),这两行代码写在了排序算法的第二个for语句中,导致出现错误结果;现在想通了,先要从后面的元素中找到最小的,然后再交换,而不是急着交换!
冒泡排序:
参考程序
#include<stdio.h>
int main(void){
int a[10];
puts("请输入10个实数:");
for(int i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
puts("您输入的是个数为:");
for(int j=0;j<10;j++)
{
printf("%d\t",a[j]);
}
int item;
/*冒泡排序算法*/
for(int m=1;m<10;m++)
{
for(int n=9;n>=m;n--)
{
if(a[n]<a[n-1])
{
item=a[n-1];
a[n-1]=a[n];
a[n]=item;
}
}
}
//输出数组
puts("\n从小到大排序后,输出为:");
for(int k=0;k<10;k++)
{
printf("%d\t",a[k]);
}
}