我如何实现bubblesort以及在哪里实现

How do i implement bubblesort and where

本文关键字:实现 bubblesort 在哪里 何实现      更新时间:2023-10-16

任务是在我的"familyj"数组中实现一个bubblesort函数和一个linearsearch(又名"linsok")。数组同时保留了名称和年龄,所以我想根据它们的年龄对数组进行排序并打印出来。我让搜索引擎工作了,但现在我坚持使用冒泡引擎。

问题是我不知道如何让我的冒泡排序代码为这个代码工作。那么,我要在这里实现第二段代码吗?

#include <iostream>
#include <string>
using namespace std;

class Person        
{
    public:
    string namn;    
    int alder;
    void skrivUt(string _namn, int _alder)  
    {
        namn = _namn;
        alder = _alder;
    }
};
int linsok(Person* PersonArray, int key) 
{
    for (int i = 0; i < 4; i++)
    {
    if (PersonArray[i].alder == key)
        return i;
    }
return -1;
}

int main()
{
    Person familj[4];               
    familj[1].skrivUt("Emma",23);
    familj[3].skrivUt("Emilia",29);
    familj[2].skrivUt("Johan",26);
    familj[0].skrivUt("Timmy ",21);

int index = linsok(familj,22);  //the age of the person im looking for.

if(index== -1)                      
    cout << "Personen hittades ej!"; //person not found
else            
         //prints out the persons name and the index.                   
    cout << "Personen heter " << familj[index].namn << " hen finns på index " << index << endl;

cin.get();
return 0;
}

这是我以前使用的一段冒泡排序代码,它很有效。

int p [] = {10,56,73,23,31,24,43};  
int a = 6;

for (int i = 0; i < a; i++)
{
    int nrLeft = a - i;
    for (int j = 0; j < nrLeft; j++)
    {
        if (p[j] > p[j+1])
        {
            int temp = p[j];
            p[j] = p[j+1];
            p[j+ 1] = temp;
        }
    }
}
for(int i = 0; i < 7; i++)
cout << p[i] << endl;  
cin.get();

很可能您想将其转换为一个函数,将Person对象数组及其大小传递给该函数,然后只访问要比较的部分。由于您将把它实现为一个函数,所以可以像使用linsok函数一样使用它,尽管您可能希望它返回排序数组,而不是索引。以下代码的免责声明:既不运行也不编译

Person* bubbleSort(Person* p, int size)
{
for (int i = 0; i < size; i++)
{
    int nrLeft = size - i;
    for (int j = 0; j < nrLeft; j++)
    {
        if (p[j].alder > p[j+1].alder)
        {
            Person temp = p[j];
            p[j] = p[j+1];
            p[j+ 1] = temp;
        }
    }
}
return p;
}

这是基于你按阿尔德(我猜是年龄?我不会说瑞典语(?))对它们进行排序。你只需要提供签名,并根据你的需求进行更改,但基本的想法是,你只需要更改你比较的内容和数据类型。

另一种方法是返回一个intvoid(但您应该返回一个int来告诉您它是否成功),并将一个指针传递给数组,因此Person**在签名中,并直接对该数组进行操作,但这有点困难,而且可以说是不好的做法,具体取决于用例。