#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
}
选择排序:
void select_sort(int a[],int n) //传入数组的要排序的元素个数
{int i,j,min,t
for(i=0i<n-1i++)
{ min=i //min:当前最小值下标
for(j=i+1j<nj++) //扫描余下的部分
if(a[min]>a[j]) //若有其它元素更小,就记录其下标
min=j
if(min!=i) //保若最小值不在排序区首位,就换到首位
{t=a[min]a[min]=a[i]a[i]=t}
}
}
冒泡排序:
void bubble_sort(int a[], int n) //传入数组的要排序的元素个数
{ int i, j, t
for (j=0j<n-1j++) //n个元素比较n-1轮
for (i= 0i<n-1-ji++) //比较相信的两个数
if(a[i]>a[i+1]) //若大小顺序不符,就交换
{t=a[i] a[i]=a[i+1]a[i+1]=t
}
最大值吧!/*选择法 进行n-1次循环,每次循环下来选择一个最大或最小数*/
#include<stdio.h>
void sort(int a[],int n)
{
int i,j,temp,maxi/maxi中放最大的数组下标
for(i=0i<n-1i++) /*选择从第一个数开始*/
{
maxi=i/*假设第i个下标最大*/
for(j=i+1j<nj++)
if(a[j]>a[maxi]) maxi=j/*maxi中始终放最大值*/
if(maxi!=i)
{
temp=a[i]
a[i]=a[maxi]
a[maxi]=temp
}
}
}
main()
{
int *p,i,a[5]
p=a
for(i=0i<5i++)
scanf("%d",p+i)
sort(p,5)
for(p<a+5p++)
printf("%2d",*p)
}