#include<stdio.h>
#define M 5
void main()
{
int b[M],i,j,t,k
for(i=0i<Mi++)
scanf("%d",&b[i])
for(i=0i<M-1i++)
{
for(k=i,j=i+1j<Mj++)
if(b[k]<b[j])
k=j
if(i!=k)
{
t=b[i]
b[i]=b[k]
b[k]=t
}
}
for(i=0i<Mi++)
printf("%d ",b[i])
}
错在大括号位置加错了。
扩展资料:C语言选择排序详解
工作原理是每一次从无序组的数据元素中选出最小(或最大)的一个元素,存放在无序组的起始位置,无序组元素减少,有序组元素增加,直到全部待排序的数据元素排完。
以升序为例的图解:
代码:
#include<stdio.h>
void SelectionSort(int *num,int n)
{
int i = 0
int min = 0
int j = 0
int tmp = 0
for(i = 0i <n-1i++)
{
min = i//每次讲min置成无序组起始位置元素下标
for(j = ij <nj++)//遍历无序组,找到最小元素。
{
if(num[min]>num[j])
{
min = j
}
}
if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置
{
tmp = num[min]
num[min] = num[i]
num[i] = tmp
}
}
}
(此处空一行)
int main()
{
int num[6] = {5,4,3,2,9,1}
int i = 0
SelectionSort(num,6)//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。
for(i = 0i <6i++)
{
printf("%d ",num[i])
}
return 0
}
#include<stdio.h>int main()
{int i,j,k,t,a[10]
for(i=0i<10i++) //输入10个整数
scanf("%d",&a[i])
for(i=0i<9i++) //排序10个数,需要9轮
{k=i //当前最小值的编号
for(j=i+1j<10j++) //扫描后续所有元素
if(a[j]<a[k])k=j //如后面的元素更小,就更新最小编号
t=a[i] a[i]=a[k] a[k]=t //把最小的元素交换到第 i 位
}
for(i=0i<10i++) //输出排好序的元素值
printf("%d ",a[i])
return 0
}
1、打开visual C++ 6.0,准备一个空白的c语言文件,引入头文件,在main函数中定义变量和数组:
2、接下来用scanf函数输入的10个数,将输入的数存入到变量a中,接着进行比较排序,如果后一个数比前一个数大则利用中间变量t实现俩值互换,最后输出排序的结果:
3、编译运行程序,输入任意的10个数,回车后即可看到排序后的结果。以上就是c语言中选择排序的用法:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)