c语言选择排序法?

#include<stdio.h>
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;
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;
}
哪里出错了??像1 2 4 3 5 6就不行,而有些就可以。。。。

#include<stdio.h>

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;

}

追答

一般不采用这样的办法来进行选择排序。因为如果使用这种方法排序的话,当最大值就在一开头的位置,当你把最小值交换到最前头的时候,原先的最大值就被更换位置,不再是原来的地方了,新增加的这一句话就是更改这个新的最大值所在的位置。

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-11-16
这个比较难跟一般的不太一样。
第2个回答  2020-11-16

#include<stdio.h>

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;

}

你的程序出现了鬼打墙现象,当ma本身最大的时候,被mi偷偷换掉了!加粗部分注意

c语言数组选择排序
c语言实现选择排序步骤如下:定义数组a[x],并输入其元素。设置变量b作为起始比较点,c作为最小值索引,d作为最小值,i作为循环索引,n作为数组长度。循环遍历数组,从起始点b开始,比较a[b]与后续元素,找到最小值。若发现更小值,则更新最小值索引c和最小值d。遍历结束后,将最小值d与当前比较...

C语言中的选择排序法是什么?
选择排序(Selection sort)是一种简单直观的排序算法。工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。以下是一个实现选择排序的例子:define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t)) \/\/将...

C语言的选择排序法
int a[10], i;在主循环中输入数组元素:c for (i = 0; i < 10; i++) { scanf("%d", &a[i]);} 输出原始数组元素:c for (i = 0; i < 10; i++) { printf("=", a[i]);} printf(" ");调用排序函数:c com(a, 10);这里需要定义排序函数:c void com(int arr[],...

c语言常用数组排序方法
选择排序法 在待排序数组中,查找最大或最小的元素,将其与最前面未排序元素互换位置。查找最大值时从小到大排序,查找最小值时从大到小排序。使用变量iTemp存放最值,iPos记录最值位置。进行内外双层循环,外层循环将最值交换,内层循环查找最值。每次外层循环包含从m-n次内层循环,m为元素总数,n为...

c语言 选择法排序
选择法就是找出最小或最大的放在头上,然后从剩下的部分中重复这个过程:1:i循环,对a[1]到a[9]这九个数 2:i循环开始 3:假设a[i]为最小,保存i到min 4:j循环,对a[i+1]到a[10]这些数 6:j循环开始 7:判断a[min]是否大于a[j]8:条件语句开始 9:条件成立,则说明当前的最小...

c语言的两种排序?
1、选择排序法 要求输入10个整数,从大到小排序输出 输入:2 0 3 -4 8 9 5 1 7 6 输出:9 8 7 6 5 3 2 1 0 -4 代码:include<stdio.h> int main(int argc,const char*argv[]){ int num[10],i,j,k,l,temp;\/\/用一个数组保存输入的数据 for(i=0;i<=9;i++){ scanf(...

选择排序法C语言问题
选择排序法是将第一个数默认为最小值,然后将它后面的数和它进行比较,如果有数比它小,用min_k记录这个较小数的下标,min等于这个数,然后接着向后比较,(注意后面的数一直和min比较)一直到最后一个数也比较完,这时i=n,min记录的时最小的数的值,min_k记录最小值的下标,接着进行交换,( x...

c语言如何用选择排序对10个整数排序
for (i=0;i<10;i++) \/\/在c语言中,数组的下标从0开始 printf("%5d",a[i]); \/\/输出这10个数 printf("\\n"); \/\/以下8行是对这10个数排序 for (i=0;i<10;i++){min=i;for(j=i+1;j<10;j++)if (a[min]>a[j]) min=j;temp=a[i]; \/\/以下3行将a[i+1]~a[10]中...

C语言大牛推荐七大排序算法学生来看
C语言7种排序算法附代码 1.冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换它们两个对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数:针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。2.选择排序 在未排席序列中...

C语言 | 选择法对10个数排序
C语言中,利用选择法对一组10个整数进行排序的实现方法直观易懂。该排序算法的基本思想是,每一轮比较中,从剩余未排序的数中选出最小的一个与当前未排序序列的第一个元素交换位置,直至所有元素有序。以下是排序过程的四个关键步骤:首先,通过键盘输入获取10个整数,作为待排序的数组。然后,程序会...

相似回答
大家正在搜