Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để tìm phần tử lớn nhất thứ k trong một chuỗi

Trong chương trình này, chúng ta cần trích xuất phần tử lớn nhất thứ K từ một dãy. độ phức tạp về thời gian của kỹ thuật này có thể được cải thiện bằng cách tiếp cận vấn đề bằng cách sử dụng max-heap. Độ phức tạp về thời gian của chương trình này là O (n + k * log (n)).

Thuật toán

 Begin Gửi giá trị lớn nhất của heap đến cuối chuỗi. Làm chồng lên trình tự còn lại. Lặp lại quy trình cho lần ‘k’. In trạng thái cuối cùng của mảng. Kết quả là in giá trị tối đa từ heap được trích xuất từ ​​lần lặp thứ k. 

Mã mẫu

 #include  using namespace std; void MaxHeapify (int a [], int i, int n) {int j, t; t =a [i]; j =2 * i; while (j <=n) {if (j  a [j]) j =j + 1; if (t> a [j]) break; else if (t <=a [j]) {a [j / 2] =a [j]; j =2 * j; }} a [j / 2] =t; return;} void Build_MaxHeapify (int a [], int n) {int i; for (i =n / 2; i> =1; i--) MaxHeapify (a, i, n);} int main () {int n, i, temp, k; cout <<"\ nNhập số phần tử dữ liệu sẽ được sắp xếp:"; cin>> n; n ++; int arr [n]; for (i =1; i > arr [i]; } cout <<"\ nNhập giá trị k:"; cin>> k; Build_MaxHeapify (arr, n-1); for (i =n-1; i> =n-k; i--) {temp =arr [i]; arr [i] =arr [1]; arr [1] =tạm thời; MaxHeapify (arr, 1, i - 1); } cout <<"\ nSau khi chồng hóa tối đa mảng đã cho" <" < 

Đầu ra

 Nhập số phần tử dữ liệu được sắp xếp:5Nhập phần tử 1:20Nhập phần tử 2:10Nhập phần tử 3:30Nhập phần tử 4:70Nhập phần tử 5:60Nhập giá trị k:2Sau tối đa hóa mảng đã cho 2 lần trạng thái mảng là:-> 30-> 20-> 10-> 60-> 70 Phần tử lớn thứ 2 là:60