簡體   English   中英

對對象數組的選擇排序

[英]Selection Sort on an Array of Objects

在網上四處張望,但至今找不到任何相關信息。 我在C ++入門課程中,有一個正在處理對象數組的項目。 對象(稱為媒體)具有名稱和等級。 我將三個不同的媒體對象放入媒體對象數組。 我需要找到一種按名稱對它們進行排序的方法。 為我提供了用於c字符串選擇排序的代碼,但還無法弄清楚將其轉換為處理媒體對象的確切方法。 這是我對C弦的選擇排序。

void selectsort(char str[][20], int N)
{
int pass, j, min;
char temp[20];
for (pass = 0; pass <= N - 2; pass++)  // passes
{
min = pass;
for (j = pass + 1; j < N; j++)  // in each pass
if (strcmp(str[min], str[j]) > 0)
min = j;
    strcpy(temp, str[min]);
    strcpy(str[min], str[pass]);
    strcpy(str[pass], temp);
    }
}

我已經通過重載<和來擺脫了strcmp

int media::operator<(media med)
    {
        return strcmp(mname, med.mname);
    }

和strcpy通過重載=與

void media::operator=(media med)
    {
        strcpy(mname, med.mname);
    }

我相信這將返回相同的結果,是嗎?

到目前為止,這是我的代碼(只是讓我自己不了解如何做)。

void selsort(media mry[], int n) // mry[] is the object array, n is the 
                                 // number of objects in the array
{
    int pass, j, min;
    media temp[1];
    for (pass = 0; pass <= n - 2; pass++)  // passes
    {
        min = pass;
        for (j = pass + 1; j < n; j++)  // in each pass
            if ((mry[min] < mry[j]) < 0)
                min = j;
        temp = mry[min];
        mry[min] = mry[pass];
        temp = mry[min];
    }
}

我知道這段代碼有很多缺陷。 臨時比較無法正常工作,當我嘗試使用* temp或temp [0](在此處嘗試太陽下的所有操作)時,我得到了損壞的數據錯誤。 我似乎無法弄清楚。 我一直在努力理解各種事物,這只會增加對侮辱的侮辱。 (還請注意,有些表示法可能不正確,但這是我在本課中所教的內容以及這位教授要求我們編寫的內容)

謝謝你的幫助!

您的代碼有兩件事:

  1. media temp[1]; 您為什么要將用於交換的臨時媒體存儲區設置為1的數組?
  2. 交換: temp = mry[min]; mry[min] = mry[pass]; temp = mry[min]; temp = mry[min]; mry[min] = mry[pass]; temp = mry[min]; 看到有什么問題嗎?

這是調整后的功能,BTW可以正常工作:

void selsort(media mry[], int n) // mry[] is the object array, n is the 
                                 // number of objects in the array
{
    int pass, j, min;
    media temp;
    for (pass = 0; pass <= n - 2; pass++)  // passes
    {
        min = pass;
        for (j = pass + 1; j < n; j++)  // in each pass
            if ((mry[min] < mry[j]) < 0)
                min = j;
        temp = mry[min];
        mry[min] = mry[pass];
        mry[pass] = temp;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM