选择排序从大到小(选择排序从大到小怎么排)
请教一下这道C语言进行选择排序,为什么只能从大到小,却不能从小到大?
因为你把选择排序函数SelectSort中的交换部分放到了for_j循环内,交换部分应该放到for_j循环外,for_i循环内.
我帮你改好了,只要移动一下大括号就行了(见图,改动的地方见注释)
利用选择排序法对数组x中的数据按从大到小排序
int a[] = {20,10,50,30,70,59,65,80,90,100}; for (int i=0;i10-1;i++) { for (int j=i+1;j10;j++) { if (a[j]a[i]) { int ... max了 就比较剩下的 依次比完 就算排好了 用你这个数组做比方 a[] = {20,10,50,30,70,59,65,80,90,100}; 按从大到小 ...
C语言采用选择法对数组元素按从大到小的顺序排列
#includestdio.h
#define SIZE 10
main()
{
int a[SIZE]={3,8,7,6,5,0,
1,2,9,4};
int max,pos;
int i,j;
printf("数组中原存放数据是:\n");
for(i=0;iSIZE;i++)
printf("%3d",a[i]);
for(i=0;iSIZE-1;i++)
{
max=a[i];
pos=i;
for(j=i+1;jSIZE;j++)
if(a[j]max)
{
max=a[j];
pos=j;
}
a[pos]=a[i];
a[i]=max;
printf("\n经过第%d次排序后,数组变为:\n",i+1);
for(j=0;jSIZE;j++)
printf("%3d",a[j]);
}
}
用选择法,对输入的20个数进行从大到小的排序
#includestdio.h
int?main(){
int?i,j,p,t;
int?a[20];
printf("Please?input?20?numbers:\n");??/*输入20个数,并且存放到数组a[i]中*/
for(i=0;i20;i++)
scanf("%d",a[i]);
for(i=0;i19;i++){???/*只对前面19个数分析,最后一个数在前面19确定下来后就自动确定了*/
p=i;
for(j=i+1;j20;j++){??/*每次选取一个i,则只需对其后面的a[i+1]到a[9]这几个数进行排序*/
if(a[p]a[j])?p=j;??/*如果a[p](即a[i])大于a[j],则将j的值赋予p*/
}
if(p!=i){
t=a[p];
a[p]=a[i];
a[i]=t;
}??/*此步执行完以后,a[i]为最小值*/
}???????/*执行完19次循环后,排序完成*/
printf("The?scored?numbers?are?as?follows:\n");
for(i=0;i20;i++)???/*按从小到大的循序输出20个数*/
?? printf("%4d",a[i]);
return?0;
}
C语言:给定一数组,包涵n个元素,设计功能函数,使用选择排序法,对其进行从大到小排序
//选择排序算法,按从小到大顺序
void?select_sort(int?*arr,int?n)
{
????int?i,j,k;
????int?tmp;
????for(i=0;in-1;i++)
????{
????????k=i;??//开始一趟选择排序,假定第i个元素是后面n-i+1个未排序的元素中最小的元素
????????for(j=i+1;jn;j++)
????????{
if(arr[k]??arr[j])?//如果发现比当前最小元素还小的元素,则更新记录最小元素的下标k
????k=j;
????????}
//如果最小元素的下标不是后面n-i+1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置
????????if(k?!=?i)
????????{
????????????tmp=arr[k];
????????????arr[k]=arr[i];
????????????arr[i]=tmp;
????????}
????}
}