giảm dần Tôi mới đến C++ và tôi đang cố gắng để làm this:C++: Sắp xếp các phần ban đầu của một mảng tăng dần và phần khác nhằm
Tôi có một mảng của N yếu tố. Người dùng có thể nhập tất cả các phần tử của một mảng và một số K. Sau đó tôi phải sắp xếp các mảng như vậy mà phần đầu tiên (yếu tố để K) được sắp xếp trong chế độ tăng dần và phần thứ hai (yếu tố K để N) được sắp xếp trong chế độ giảm dần.
Chức năng sắp xếp được thực hiện bởi chính tôi. Tôi có thể sử dụng qsort từ cstdlib
, nhưng nó không thú vị lắm.
Tôi đã mã hóa để sắp xếp một mảng, nhưng tôi không thể hiểu cách sắp xếp một mảng theo hai phần.
#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);
}
}
Bằng cách thay đổi '<' with '>' (hoặc ngược lại) của giải pháp trước đó của bạn, bạn sẽ nhận được câu trả lời, phải không? – Ian
FYI, đây không phải là C; đó là C++ – Pawan
Bạn có quan tâm đến C hoặc C++ không? Các câu trả lời sẽ khá khác nhau. – juanchopanza