解题思路:所谓选择法就是将n个数中最小的数与a[0]对换;再将a[1]-a[n]中最小的数与a[1]对换......没比较一轮,找出一个未经排序的数中最小的一个,共比较n-1轮,下面以5个数为例说明选择排序法的步骤:
a[0] a[1] a[2] a[3] a[4]
3 6 1 9 4
1 6 3 9 4
1 3 6 9 4
1 3 4 9 6
1 3 4 6 9
注意事项:
参考代码:
#include<stdio.h>
int main()
{
void choosesort(int *a,int n); //函数声明
void output(int *a,int n); //函数声明
int n,a[1000]; //本题要求n不小于1000,数组上限达不到容易运行出错
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
choosesort(a,n); //调用排序函数
output(a,n); //调用输出函数
return 0;
}
void choosesort(int *a,int n) //选择排序算法,接受用指针或数组a[]
{
int i,j,k,t;
for(i=0;i<n-1;i++) //n个数排序一共比较n-1趟
{
k=i; //记录每行的首元素
for(j=i+1;j<n;j++) //每少一趟,少比较一个数,所以从i+1开始
if(a[j]<a[k])
k=j; //标记出剩余元素中的最小值
t=a[k];a[k]=a[i];a[i]=t; //将标记的值与首元素进行互换
}
}
void output(int *a,int n) //输出排好序的数组(指针法效率更高)
{
int *p;
for(p=a;p<a+n;p++)
printf("%d ",*p);
}
0.0分
4 人评分
【偶数求和】 (C++代码)浏览:702 |
【回文数(二)】 (C语言代码)浏览:728 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:526 |
用筛法求之N内的素数。 (C语言代码)浏览:802 |
数组与指针的问题浏览:716 |
Quadratic Equation (C语言代码)浏览:988 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:946 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:740 |
A+B for Input-Output Practice (II) (C语言代码)浏览:596 |
判定字符位置 (C++代码)浏览:667 |