选择排序从大到小(选择排序从大到小怎么排)

http://www.itjxue.com  2023-01-26 14:41  来源:未知  点击次数: 

请教一下这道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;

????????}

????}

}

(责任编辑:IT教学网)

更多