#include<stdioh>
int main()
{ int a[6],max,min,i,j,ma,mi,t,mid;
for(i=0; i<6; i++)
{ scanf("%d",&a[i]);
}
for(i=0; i<3; i++)
{ min=a[i];
max=a[i];
for(j=i,mi=i,ma=i; j<6-i; j++)
{ if(a[j]<min)
{ min=a[j];
mi=j;
}
if(a[j]>max)
{ max=a[j];
ma=j;
}
}
t=a[i];
a[i]=a[mi];
a[mi]=t;
if(ma==i)ma=mi; //增加了这一行
mid=a[5-i];
a[5-i]=a[ma];
a[ma]=mid;
}
for(i=0; i<6; i++)
{ printf("%d",a[i]);
printf(" ");
}
return 0;
}
选择排序改进了冒泡排序,每次遍历列表只做一次交换,为了做到这一点,一个选择排序在遍历时寻找最大的值,并在完成遍历后,将其放到正确的地方。
第二次遍历,找出下一个最大的值。遍历n-1次排序n个项,最终项必须在n-1次遍历之后。
接下来呢,我们直接进行把最小值放到已排序序列末尾的 *** 作。当然这是第一轮循环,还没有产生已排序的序列。0就是已排序序列的开头数字了。
第二轮初始化开始,我们继续选取假设的最小值,这次,我们还是选取第一个数字作为假设的最小值,需要注意的是,0已经是已排序序列,我们要从未排序的序列中选取第一个数字,也就是(5、1、8、6、2、3、4、9、7)无序序列中的数字5。
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<n;j++) //将第i个元素后面的元素与第i个元素进行比较
if(array[j]<array[k]) //如果第k=i个元素后面的元素小于i号元素,交换两个元素的标号, 这样就将最小元素的标号放到最前面
k=j; //交换标号
temp=array[k]; //循环结束后,交换两个标号下的元素的值
array[k]=array[i];
array[i]=temp;
}
}
这个程序实现的是由小到大的排序。第二个循环里面,就是i号元素后面最小的元素对应的标号放到k中,在交换当前元素与k号元素中的值,实现由大到小排序
以上就是关于c语言选择排序法全部的内容,包括:c语言选择排序法、选择排序c语言代码、c语言 选择法排序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)