malejąco Jestem nowym do C++ i próbuję zrobić this:C++: Sortowanie początkową część tablicy w kolejności rosnącej i drugiej strony w kolejności
Mam tablicę N elementów. Użytkownik powinien mieć możliwość wprowadzania wszystkich elementów tablicy i numeru K. Potem trzeba sortować szereg tak, że pierwsza część (elementy do K) są sortowane w trybie wstępującej, a druga część (elementy K do N) są sortowane w trybie malejącym.
Funkcja sortowania jest realizowana przeze mnie. Mogę użyć qsort z cstdlib
, ale nie jest to takie interesujące.
Mam kodowanie do sortowania tablicy, ale nie mogę zrozumieć, jak posortować tablicę na dwie części.
#include <iostream>
#include <string>
void print_array(int[], int);
void qsort(int[], int, int);
int main()
{
int array_length;
int *array, k;
std::cout << "Write array length: ";
std::cin >> array_length;
array = new int[array_length];
for (int i = 0; i < array_length; i++) {
std::cout << "Write " << i + 1 << " element: ";
std::cin >> array[i];
}
print_array(array, array_length);
do {
std::cout << "Write k: ";
std::cin >> k;
} while (k >= array_length);
qsort(array, 0, k);
print_array(array, array_length);
}
void print_array(int* array, int length) {
for (int i = 0; i < length; i++) {
std::cout << array[i] << "\n";
}
}
void qsort(int arr[], int fst, int last)
{
int i, j, pivot, tmp;
if (fst < last)
{
pivot = fst;
i = fst;
j = last;
while (i < j)
{
while (arr[i] <= arr[pivot] && i < last)
i++;
while (arr[j] > arr[pivot])
j--;
if (i < j)
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
tmp = arr[pivot];
arr[pivot] = arr[j];
arr[j] = tmp;
qsort(arr, fst, j - 1);
qsort(arr, j + 1, last);
}
}
Zmieniając '<' with '>' (lub odwrotnie) poprzedniego rozwiązania, powinieneś otrzymać odpowiedź, czyż nie? – Ian
FYI, to nie jest C; to jest C++ – Pawan
Czy jesteś zainteresowany C lub C++? Odpowiedzi byłyby zupełnie inne. – juanchopanza