Ваш вопрос указывает на то, что может возникнуть некоторая путаница относительно того, как обращаться с указателями в C ++. Если мое предположение неверно, тогда просто пропустите (я предоставлю «мое решение» / исправление в конце этого поста).
Чтобы ответить на ваш первый вопрос: вы не можете передавать массивы в стиле C для каждого значения в C ++, а также для справки. Ваша единственная «опция» будет проходить по указателю, пока не будет достигнуто «\ n», и сохранить содержимое в новом массиве, созданном в вашей функции.
что было бы чем-то вроде
'{
int arrx[5] = {};
for(int i = 0; i < 5; i++)
{
arrx[i] = arr[i];
}
for (int j = 0; j < 5; j++) // print
{
std::cout << arrx[j];
}
return 0;
}`
Несколько других вещей об указателях:
int *sort(int arr[]){ -> arr[] passes a pointer to arr(same as *arr)
Указатель указывает на первый элемент в памяти, на который указывает & не имеет наследуемого размера, что означает
sizeof(arr) / sizeof(arr[0])
не будет работать внутри вашей функции сортировки (что может привести к проблемам, если вы точно не знаете, какой длины массив, который вы хотите найти). простым решением было бы передать размер вашего массива по значению / ссылке на вашу функцию.
Другим решением было бы перебрать сам массив через что-то вроде
for(;arr != '\n'; arr++)
{
//your code here
Вы можете получить гораздо больше информации об указателях, чем я когда-либо мог бы дать вам, посетив различные учебные сайты.
например: https://www.tutorialspoint.com/cplusplus/cpp_pointers.htm
http://www.cplusplus.com/doc/tutorial/pointers/
Но теперь вернемся к исходному вопросу и, надеюсь, ответу на него.
int *sort(int arr[]) {
for (int i = 0; i< 1; i++) {
следует исправить на for(int i=0; i< 5-1; i++)
функция сортировки, которую вы пытаетесь реализовать, называется пузырьковой сортировкой. для получения дополнительной информации и как именно работает bubblesort, см. https://de.wikipedia.org/wiki/Bubblesort
for (int j = 1; j< 5; j++) {
следует исправить на for(int i=0; i< 5-1-i; i++)
, потому что последние элементы уже на месте.
if (arr[i]< arr[j]) {
должно быть исправлено на if (arr[j]< arr[j+1])
, потому что вы хотите сравнить (например) первый элемент и следующий элемент, чтобы получить его в порядке убывания / возрастания. это делается для каждой пары чисел в вашем массиве.
и наконец:
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
должно выглядеть примерно так:
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
обратите внимание, что вы также можете переформатировать его в:
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp; // same output
в качестве примера: если arr [j] = 5 и arr [j + 1] = 6, вы сохраняете значение j + 1 (6) в temp, перезаписываете arr [j + 1] с помощью j (5) и наконец, сохраните 6 в j, чтобы получить нисходящий порядок (надеюсь, я получил это прямо сейчас, но вы понимаете суть)
наконец; как уже правильно отметили другие, вы можете использовать std::swap
вместо использования переменных key / temp.