c语言 选择法排序

2025-03-07 08:34:40
推荐回答(5个)
回答1:

void sa(int array[],int n)
{
int i,j,k,temp;
for(i=0;i<10;i++)
{
k=i; //保存i的值,用k来进行循环排序
for(j=i+1;j if(array[j] k=j; //交换标号
temp=array[k]; //循环结束后,交换两个标号下的元素的值
array[k]=array[i];
array[i]=temp;
}
}
这个程序实现的是由小到大的排序。第二个循环里面,就是i号元素后面最小的元素对应的标号放到k中,在交换当前元素与k号元素中的值,实现由大到小排序

回答2:

选择法的算法:
假设需要对10个数进行排序,那么首先找出10个数里面的最小数,并和这个10个数的第一个(下标0)交换位置,剩下9个数(这9个数都比刚才选出来那个数大),再选出这9个数中的最小的数,和第二个位置的数(下标1)交换,于是还剩8个数(这8个数都比刚才选出来的大)..

依次类推,当还剩两个数时,选出两个数的最小者放在第9个位置(下标8),于是就只剩下一个数了。这个数已经在最后一位(下标9),不用再选择了。所以10个数排序,一共需要选择9次(n个数排序就需要选择n-1次)。

回答3:

void sa(int array[],int n)

{

int i,j,k,temp;

for(i=0;i<10;i++)

{

k=i;                 //保存i的值,用k来进行循环排序

for(j=i+1;j

if(array[j]

k=j;                //交换标号

temp=array[k];          //循环结束后,交换两个标号下的元素的值

array[k]=array[i];

array[i]=temp;

}

}

回答4:

#include
#define N 6
void main()
{ int a[N]={2,4,6,5,9,8},i,j,t;
for(i=0;i for(j=i+1;j if(a[i] {t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<=N-1;i++)
printf("%d",a[i]);

}

回答5:

以整形数组元素为例,有数组A[10](以C语言为例描述),即A[0],A[1],…,A[8],A[9](假设其元素均互不相同)。要求对其元素排序使之递增有序。
首先以一个元素为基准,从一个方向开始扫描,比如从左至右扫描,以A[0]为基准。
接下来从A[1],…,A[9]中找出最小的元素,将其与A[0]交换。
然后将基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换。
一直进行到基准位置移到数组最后一个元素时排序结束(此时基准左边所有元素均递增有序,而基准为最后一个元素,故完成排序)。
以下为一个用C描述的函数实现上述排序:
void sort(int array[],int n)
{ // n 为数组元素个数
int i,j,k,temp; // i 为基准位置,j 为当前被扫描元素位置,k 用于暂存出现的较小的元素的位置
for(i=0;i {k=i;//初始化为基准位置
for(j=i+1;j {
if (array[j] } //for
if(k!=i)
{ temp=array[i];
array[i]=array[k];
array[k]=temp; // 将此趟扫描得到的最小元素与基准互换位置
}
}
}