Bubblesort и Выбор Сортировка не сортировка

Для моего проекта я должен отсортировать массив, используя две функции в отдельных файлах в файлах .cpp вместо файлов .h. Один предназначен для сортировки пузырьков по убыванию, а другой — для сортировки по возрастанию. Когда я компилирую свой код, ни один из видов или работает. Может кто-нибудь помочь мне разобраться?

Вот мой код до сих пор.

Driver.cpp

#include <iostream>
#include <stdlib.h>
#include "bubblesort.cpp"#include "selectionsort.cpp"
const int ArraySize = 10;
const int Seed = 1;

int main(int argc, const char * argv[])
{
int values[ArraySize];

//seed random number generator
srand(Seed);

//fill array with random intergers
for (int i = 0; i < ArraySize; i++)
values[i] = rand();

std::cout << "\n Elements in array." << std::endl;

for (int i = 0; i < ArraySize; i++)
std::cout << &values[i] << "\n";

//function call for bubble sort in descending order.
bubblesort(values, ArraySize);

std::cout << "\n Array after bubble sort" << std::endl;

for (int i = 0; i < ArraySize; i++)
std::cout << &values[i] << "\n";

//function call for selection sort in ascending order
selectionsort(values, ArraySize);

std::cout << "Array after selection sort." << std::endl;
for (int i = 0; i < ArraySize; i++)
std::cout << &values[i] << "\n";

return 0;
}

bubblesort.cpp

inline void bubblesort(int values[], int size)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = 0; j < size - 1; j++)
{
if (values[j + 1] > values[j])
{
int temp = values[j];
values[j] = values[j + 1];
values[j + 1] = temp;

}
}
}
}

selectionsort.cpp

inline void selectionsort(int values[], int size)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = 0; j < size; j++)
{
if (values[i] < values[j])
{
int temp = values[i];
values[i] = values[j];
values[j] = temp;
}
}
}
}

Редактировать:

Это дает следующий вывод:

Elements in array.
0x7fff4f38f620
0x7fff4f38f624
0x7fff4f38f628
0x7fff4f38f62c
0x7fff4f38f630
0x7fff4f38f634
0x7fff4f38f638
0x7fff4f38f63c
0x7fff4f38f640
0x7fff4f38f644

Array after bubble sort
0x7fff4f38f620
0x7fff4f38f624
0x7fff4f38f628
0x7fff4f38f62c
0x7fff4f38f630
0x7fff4f38f634
0x7fff4f38f638
0x7fff4f38f63c
0x7fff4f38f640
0x7fff4f38f644
Array after selection sort.
0x7fff4f38f620
0x7fff4f38f624
0x7fff4f38f628
0x7fff4f38f62c
0x7fff4f38f630
0x7fff4f38f634
0x7fff4f38f638
0x7fff4f38f63c
0x7fff4f38f640
0x7fff4f38f644

-2

Решение

Вы распечатываете адреса элемента массива здесь
станд :: соиЬ << &Значения [I] << «\ П»;
Вы должны использовать
станд :: соиЬ << Значения [I] << «\ П»;
печатать элементы

Ваши функции сортировки также неверны

inline void bubblesort(int * values, int size)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size ; j++)
{
if (values[i] < values[j])
{
int temp = values[j];
values[j] = values[i];
values[i] = temp;

}
}
}

}

inline void selectionsort (int values ​​[], int size)

{
for (int i = 0; i < size - 1; i++)
{
int k = i;
for (int j = i; j < size; j++)
{
if (values[k] > values[j])
{
k = j;
}
}

if (k != i)
{
int temp = values[k];
values[k] = values[i];
values[i] = temp;
}
}
}
1

Другие решения

Здесь многое нужно сделать, давайте начнем с вашего вывода:

std::cout << &values[i] << "\n";

даст вам адрес values[i], Так как вы никогда не меняете адрес, только значения, которые вы получаете, всегда одинаковы.

Тогда давайте взглянем на вашу сортировку выбора: это не настоящий алгоритм сортировки выбора. Я думаю, что вы перепутали сортировку пузырьков и сортировку. Взгляните на выбор сортировки из википедии и вы увидите, что есть несколько частей, таких как

  • отслеживание минимального индекса вашего текущего подмассива (обязательно для сортировки выбора!)
  • неправильная реализация подкачки (следует полагаться на минимальный индекс)
0

Здесь нужно исправить несколько вещей:

  1. замещать

    void bubblesort(int values[], int size);

    с

    bubblesort(values, ArraySize);

  2. Ваша процедура вывода на самом деле возвращает адреса вместо значений, потому что вы разыменовываете ее дважды, если пишете &values ​​[i]: — values ​​[i] уже разыменовывает значение.

    std::cout << values[i] << "\n";

  3. Далее вы можете захотеть еще раз проверить свой алгоритм сортировки. Bubblesort, кажется, работает как есть, но в сортировке все еще есть что-то подозрительное. Ответ Владимира выручит.

    Ссылка для Bubblesort в C

0
По вопросам рекламы [email protected]