Không hiểu yêu cầu của bài tập C++

Giúp mình giải bài tập C++ này với ạ, mình không hiểu yêu cầu của nó

Implement a sort function (bubble sort) with unknown order preference (ascending or descending). The order preference is decided by a pointer function parameter.

void sort(int *arr, int count, int (*order) (int, int));

int CheckBigger(int a, int b) {return a>b;}

int CheckSmaller(int a, int b) {return a<b;}
#include<iostream>

using namespace std;

void nhap(int arr[], int &n) 
	cout << "Nhap so phan tu cua mang n = ";
	cin >> n;
	for (int i = 0; i < n; i++) {
		cout << "Phan tu arr["<<i<<"]=";
		cin >> arr[i];
	} 
}

void bubblesort(int arr[], int n) {
	for (int i = 0; i < n - 1; i++) {
		for (int j = 0; j < n - i - 1; j++) {
			if (arr[j] < arr[j + 1]) {
				// swap
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

void Xuat(int ar[],int n)
{

  for(int i=0;i<n;i++)
     {
         cout<<ar[i];
     }
}

int main () {
	int arr[100], n;
 	nhap(arr, n);
 	cout << " Mang ban dau la: ";
 	Xuat(ar,n);
 	bubblesort(arr, n);
 	cout<<"=> Mang khi sap xep la: ";
 	Xuat(ar,n);
 	return 0;
}

P/S: void sort(int *arr, int count, int (*order) (int, int));
bạn xem cái tham số này int (*order) (int, int) là 1 flag sort CheckBigger hay sort CheckSmaller
rồi biến tấu if else thôi ở chỗ //swap

2 Likes

Hiện thực hàm sort sử dụng “bubble sort” với một điều kiện “không biết trước”. điều kiện là thõa mãn một hàm nào đó (chính là điều kiện không biết trước, hàm này viết gì thì điều kiện là vậy)

ví dụ

  • thay vì
    if (a > b) { swap(a, b); }
    // hoặc
    if (a < b) { swap(a, b); }
  • thì viết thành
    if (CheckBigger(a, b)) { swap(a, b); }
    // hoặc
    if (CheckSmaller(a, b)) { swap(a, b); }

    // hoặc
    if (DieuKien(a, b)) { swap(a, b); } // thu tu sap xep phu thuoc vao ham DieuKien
5 Likes

mình cảm ơn ạ, mình đã hiểu rồi =))))

Cái này là if not này :smiley:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?