c语言冒泡排序改成选择排序法

#include<stdio.h>
int main()
{
int s[4][6];
int i,j,t,n;
printf("数学 语文 英语 化学 物理 总分 \n");
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&s[i][j]);
}
}
for(i=0;i<4;i++)
{
s[i][5]=s[i][0]+s[i][1]+s[i][2]+s[i][3]+s[i][4];
}
for(i=0;i<4-1;i++)
{
for(j=0;j<4-i-1;j++)
{
if(s[j][5]<s[j+1][5])
{
for(n=0;n<6;n++)
{
t=s[j][n];
s[j][n]=s[j+1][n];
s[j+1][n]=t;
}
}
}
}
for(i=0;i<4;i++)
{
for(j=0;j<6;j++)
{
printf("%d ",s[i][j]);
}
printf("\n");
}
}
怎么把这个冒泡排序改成选择排序

for(i=0;i<4-1;i++)
{
for(j=0;j<4-i-1;j++)
{
if(s[j][5]<s[j+1][5])
{
for(n=0;n<6;n++)
{
t=s[j][n];
s[j][n]=s[j+1][n];
s[j+1][n]=t;
}
}
}
}

一段改成

for(i=0;i<4-1;i++){
    for(t=i,j=t+1;j<4;j++)
        if(s[t][5]<s[j][5])
            t=j;
    if(t!=i){
        j=s[t][n];
        s[t][n]=s[i][n];
        s[i][n]=j;
    }
}

追问

对n还需要一个循环你落了,这个是选择排序法吗。怎么感觉不太一样

追答

改成——

for(i=0;i<4-1;i++){
    for(t=i,j=t+1;j<4;j++)
        if(s[t][5]<s[j][5])
            t=j;
    if(t!=i){
        for(n=0;n<6;n++){//n循环加这里
            j=s[t][n];
            s[t][n]=s[i][n];
            s[i][n]=j;
        }
    }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-05-01

给大家介绍冒泡排序的Scratch做法

相似回答