Tìm số lớn thứ hai trong mảng Pascal và cho biết vị trí tương tự lm số bé thứ hai
2 câu trả lời
Câu 1: số lớn
var a:array[1..100] of integer;
i,j,tg,n:integer;
Begin
readln(n);
for i:=1 to n do
readln(a[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]<a[j] then
begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
end;
write('phan tu lon thu 2 la:',a[2]);
readln;
End.
Câu 2: số bé
var a:array[1..100] of integer;
i,j,tg,n:integer;
Begin
readln(n);
for i:=1 to n do
readln(a[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
end;
write('phan tu nho thu 2 la:',a[2]);
readln;
End.
Bạn sử dụng QuickSelect (gần giống QuickSort) phân ra 3 phần:
-Khoá key (một số ngẫu nhiên)
-Những số nhỏ hơn khoá key sẽ nằm bên trái
-Những số lớn hơn khoá key nằm bên phải
Sau đó kiểm tra xem khoá key có nằm đúng vị trí bạn tìm không? Nếu không thì lặp lại quá trình trên với sự thay đổi vẻ phạm vi.
Bạn tham khảo thêm tại đây: https://www.geeksforgeeks.org/kth-smallestlargest-element-unsorted-array-set-2-expected-linear-time-2/?ref=rp