c - 按座位顺序对飞机座位及其乘客进行排序

标签 c arrays sorting

我知道家庭作业政策,并且请放心,我已经将大量自己的时间投入到这项作业中,而且我不会找人简单地为我做作业。

我是计算机科学专业的初学者,在这门课之前没有任何编程经验(都是关于 C 编程的),除了我年轻时的少量网站开发。我非常喜欢类(class),并且发现自己比类的大多数其他人有更好的理解力,但这项作业让我感到难过。

作业是读取乘客姓名(名字和最后一个首字母)、座位(A1、B1、C1、D1、A2 等)和票价的文本文件。输出指定为一张乘客表,他们的座位按座位顺序排序,我还必须打印最低和最高票价以及每张票的所有者,以及所有票价的平均值。我的数组都正确读取,最低、最高和平均票价都很容易找到。我的问题是排序。几周前我们接触了数组,这是我们第一次进行任何排序。我们应该使用冒泡排序,虽然我想我知道如何使用冒泡排序,但它在我的程序中不起作用(所以显然我真的不知道如何使用它)。我尝试了几种不同的方法,有时一些座位/名字会来回切换(从来不是我想要的方式),有时什么也不会发生。

总之,TL;DR:编程新手,不想帮我完成作业,需要按座位顺序(A1、B1、C1、D1、A2 等)对飞机乘客和座位进行冒泡排序。在此先感谢您的帮助。

我的输入是这样的:

A Z A1 555.55 使用不同的首字母、座位和价格重复用户认为合适的次数。

我有一个用于列的一维字符数组 (A - D),一个用于行的一维整数数组(1 到最大整数),一个用于价格的一维 float 组,以及一个用于名称首字母的二维数组。

这是读取数组的函数:

void read_Arrays(char seat_cols[], int seat_rows[], char name[][LAST], float price[])
{
int i, j;

    for(i = 0; i < SIZE; i++)
    {
        for(j = 0; j < LAST; j++)
        {
            scanf(" %c", &name[i][j]);
        }  
        scanf(" %c %d %f ", &seat_cols[i], &seat_rows[i], &price[i]);
    }
}

这是排序。我们展示的方法是使用嵌套在“do while”中的“for”循环:

do
{
    flag = 0;
    for(i=0; i < ROWSIZE-1; i++)   
    {

        if(seat_rows[i] > seat_rows[i+1])
        {
            //swap first initial
            tempName = name[i][0];
            name[i][0] = name [i+1][0];
            name[i+1][0] = tempName;

            /*swap last initial*/
            tempName = name[i][1];
            name[i][1] = name [i+1][1];
            name[i+1][1] = tempName;

            //swap seat_cols
            tempName = seat_cols[i];
            seat_cols[i] = seat_cols[i+1];
            seat_cols[i+1] = tempName;

            //swap seat_rows
            temp = seat_rows[i];
            seat_rows[i] = seat_rows[i+1];
            seat_rows[i+1] = temp;

            //flag
            flag = 1;
        }//end if

    }//end for

}while(flag == 1);

更新:感谢到目前为止提供的信息,很高兴知道我应该回答我自己的问题而不是编辑原始问题。但是,由于缺乏声誉点,此时它不会让我回答我自己的问题,所以我在这里发布更新。

输入文件:

S J D2 579.12

S G A4 176.98

B B B3 244.78

A M C9 337.15

B C A6 444.89

J B B2 891.55

M M D7 478.16

C H B1 119.63

W W A8 342.93

L R C5 588.22

输出:

B1 channel

B2 JB

D2 SJ

B3 BB

A4 纸

C5 左轮

A6BC

D7 毫米

A8 二战

C9上午

平均票价为 420.34。

最低票价119.63,车主CH。

最高票价为891.55,车主为JB。

忽略票价,这些都正常工作。我看到行号已排序,名称仍与其正确的座位相关联,但列到处都是。

这是更新后的排序:

do
{
    flag = 0;
    for(i=0; i < SIZE-1; i++)   
    {

        if(seat_rows[i] > seat_rows[i+1])
        {
            //swap first initial
            tempName = name[i][0];
            name[i][0] = name [i+1][0];
            name[i+1][0] = tempName;

            /*swap last initial*/
            tempName = name[i][1];
            name[i][1] = name[i+1][1];
            name[i+1][1] = tempName;

            //swap seat_cols
            tempName = seat_cols[i];
            seat_cols[i] = seat_cols[i+1];
            seat_cols[i+1] = tempName;

            //swap seat_rows
            temp = seat_rows[i];
            seat_rows[i] = seat_rows[i+1];
            seat_rows[i+1] = temp;

            //swap prices
            temp2 = price[i];
            price[i] = price[i+1];
            price[i+1] = temp2;

            //flag
            flag = 1;
        }//end if

        if(seat_rows[i] == seat_rows[i+1])
        {
            if(seat_cols[i] > seat_cols[i+1])
            {
                //swap first initial
                tempName = name[i][0];
                name[i][0] = name [i+1][0];
                name[i+1][0] = tempName;

                /*swap last initial*/
                tempName = name[i][1];
                name[i][1] = name[i+1][1];
                name[i+1][1] = tempName;

                //swap seat_cols
                tempCol = seat_cols[i];
                seat_cols[i] = seat_cols[i+1];
                seat_cols[i+1] = tempCol;

                //swap seat_rows
                temp = seat_rows[i];
                seat_rows[i] = seat_rows[i+1];
                seat_rows[i+1] = temp;

                //swap prices
                temp2 = price[i];
                price[i] = price[i+1];
                price[i+1] = temp2;

                //flag
                flag = 1;
            }
        }
    }//end for
}while(flag == 1);      

最佳答案

冒泡排序中的比较只检查seat_rows。当 seat_rows 相等时,需要检查 seat_cols 以确定是否需要交换。

另请注意,兑换代码需要包含价格,否则价格会相对于座位分配发生困惑。

关于c - 按座位顺序对飞机座位及其乘客进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23437815/

相关文章:

c++ - gcc内联汇编jmp地址;裸函数

php - codeigniter 从字符串修改数组以进行 insert_batch

sorting - 如何在缓冲区中对行进行随机排序?

c - struct c 动态分配内存

c - 带 if 的位运算符

c - 在 C 中将 strsep() 与动态字符串数组一起使用

java - 打印出用户输入 1 ,2 ,3 , Array,Java,Eclipse

algorithm - 计算数组中的值 "surround"数组外的不同值

python - 按多个属性对列表进行排序?

c - 初学者C : Dynamic memory allocation