黑马程序员技术交流社区

标题: ABCD分别等于 5 2 6 7 如果用冒泡排序后问题?求助 [打印本页]

作者: 77媛儿    时间: 2014-3-3 07:57
标题: ABCD分别等于 5 2 6 7 如果用冒泡排序后问题?求助
本帖最后由 jing迪 于 2014-3-6 23:42 编辑

ABCD分别等于 5 2 6 7 如果用冒泡排序可以排列大小, 请问怎么从大到小排列输出D=7 C=6 A=5 B=2
作者: 脸皮猴    时间: 2014-3-3 10:29
本帖最后由 脸皮猴 于 2014-3-3 10:33 编辑

我觉得一定要用冒泡法的话可以降ABCD的值先存入一个int型数组中,然后对应这个顺序将各个变量的名称存入一个char型数组中,再对int型数组进行冒泡排序的时候,将char行数组中的变量名称也进行一样的调换时钟保证数组中数据的顺序和char型数组中变量的顺时一一对应的。代码如下:(建议你自己可以敲一敲,还有就是这肯定是要理解冒泡)
#include <stdio.h>
void mao_pao(int data[],char name[],int n)
{
        int i,j,temp;
        char name_temp;
        //外循环需要需要n-1次
        for(i=0;i<n-1;i++)
        {
                for(j=0;j<n-i-1;j++)
                {
                        
                        if(data[j]<data[j+1])
                        {
                                //交换 data[j]和 data[j+1]的值
                                temp = data[j];
                                name_temp = name[j];
                                
                                
                                data[j] = data[j+1];
                                name[j] = name[j+1];
                                
                                data[j+1] = temp;
                                name[j+1] = name_temp;
                        }
                }
        }
}
int main()
{
int A=5,B=2,C=7,D=6;
int a[4]={A,B,C,D};
char b[4]={'A','B','C','D'};
int i;
mao_pao(a,b,4);
for(i=0;i<4;i++)
{
    printf("%c=%d\n",b,a);
}

}



作者: 77媛儿    时间: 2014-3-3 10:44
多谢 猴子同学 我是不知道 数值跟字母怎么同事换位置,原来利用两个数组就ok了! 小弟新手,望以后多多关照
作者: 董月峰    时间: 2014-3-3 11:44
void mao_pao(int data[],char name[],int n)
{
           //外循环需要需要n-1次
        for(int i=0;i<n-1;i++)
        {
                for(int j=0;j<n-i-1;j++)
                {
                        
                        if(data[j]<data[j+1])
                        {
                                //交换 data[j]和 data[j+1]的值
                     data[j]=date[j]+date[j+1];
                                name[j]=name[j]+name[j+1];
                                
                                
                                data[j+1] = date[j]-data[j+1];
                                name[j+1] = name[j]-name[j+1];
                                
                                data[j] = date[j]-data[j+1];
                                name[j] = name[j]-name[j+1];
                        }
                }
        }
}
修改下猴哥的冒泡函数
作者: 脸皮猴    时间: 2014-3-3 12:59
董月峰 发表于 2014-3-3 11:44
void mao_pao(int data[],char name[],int n)
{
           //外循环需要需要n-1次

;P我知道你那个就是不用中间变量来交换两个变量的值·但是建议写程序中别用。这个就是用来应付面试的。李明杰老师在视频里提过。;P




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2