decrescente Sono nuovo di C++ e sto cercando di fare this:C++: Ordinare la parte iniziale di un array crescente e dall'altra al fine
Ho un array di N elementi. L'utente dovrebbe essere in grado di inserire tutti gli elementi di un array e un numero K. Dopo che devo ordinare l'array tale che la prima parte (elementi a K) essere ordinati in modo crescente e la seconda parte (elementi K a N) essere filtrate in modo decrescente.
La funzione di ordinamento è implementata da me. Posso usare qsort da cstdlib
, ma non è così interessante.
Ho codificato per l'ordinamento di un array, ma non riesco a capire come ordinare un array in due parti.
#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);
}
}
Cambiando '<' with '>' (o viceversa) della soluzione precedente, dovresti ottenere la risposta, non è vero? – Ian
FYI, questo non è C; è C++ – Pawan
Sei interessato a C o C++? Le risposte sarebbero abbastanza diverse. – juanchopanza