Cài này hơi phức tạp tí, em xếp cái mảng lại trước rồi đếm.
@Th_nh_Le anh sửa cho em rồi này, mà hôm nay a mệt quá nên code có thể hơi khó hiểu tí. Em thảo luận với mọi người nhé. Anh sửa dụng thuật toán merge sort của @minh_vu_03. Có gì @minh_vu_03 giải thích dùm mấy bạn nhé
#include <iostream>
#include <stdio.h>
using namespace std;
void merge(int* array,int left,int mid,int right)
{
int temp1[mid-left+1];
int temp2[right-mid];
int index_array = left;
for(int i = 0; i < mid-left+1; i++)
temp1[i] = array[index_array++];
for(int i = 0; i < right - mid; i++)
temp2[i] = array[index_array++];
int index_temp1 = 0,index_temp2 = 0;
index_array = left;
while(index_temp1 <= mid - left && index_temp2 < right - mid)
{
if(temp1[index_temp1] < temp2[index_temp2])
{
array[index_array] = temp1[index_temp1];
index_temp1++;
}
else
{
array[index_array] = temp2[index_temp2];
index_temp2++;
}
index_array++;
}
while(index_temp1 <= mid - left)
{
array[index_array] = temp1[index_temp1];
index_array++;
index_temp1++;
}
while(index_temp2 < right - mid)
{
array[index_array] = temp2[index_temp2];
index_array++;
index_temp2++;
}
}
void merge_sort(int* array,int left,int right)
{
int mid = (right+left)/2;
if(left < right)
{
merge_sort(array,left,mid);
merge_sort(array,mid+1,right);
merge(array,left,mid,right);
}
}
int main()
{
cout <<"Nhap vao so phan tu cua mang: ";
int n;
cin >> n;
int *mang = new int[n];
for(int i = 0; i < n; ++i)
{
cout<< "Nhap vao phan tu thu "<< i+1 << ": ";
cin >> mang[i];
}
cout << "Mang vua nhap\n";
for(int i = 0; i < n; ++i)
{
cout << mang[i]<< " ";
}
cout << endl;
int max = mang[0];
for(int i = 0; i < n; ++i)
{
if (max < mang[i])
max = mang[i];
}
cout <<"Phan tu lon nhat la: "<< max << endl;
cout << "Nhap vao bac phan tu can so sanh: ";
int phan_tu_lon_thu_m;
cin >> phan_tu_lon_thu_m;
if (phan_tu_lon_thu_m > n) {
cout << "khong ton tai phan tu lon thu " << phan_tu_lon_thu_m << endl;
return 1;
}
merge_sort(mang,0,n-1);
cout << "Mang sau khi sap xep\n";
for(int i = 0; i < n; ++i)
{
cout << mang[i]<< " ";
}
cout << endl;
int bien_dem = 0;
bool found = false;
for(int i = n-1; i > 0; --i)
{
if (mang[i] == mang[i-i])
continue;
if (++bien_dem == phan_tu_lon_thu_m)
{
found = true;
cout << "Phan tu lon thu " << phan_tu_lon_thu_m << " la " << mang[i];
break;
}
}
if (!found)
if (phan_tu_lon_thu_m == n)
cout << "Phan tu lon thu " << phan_tu_lon_thu_m << " la " << mang[0] << endl;
else
cout << "khong ton tai phan tu lon thu " << phan_tu_lon_thu_m << endl;
getchar();
return 0;
}