1. Trang chủ
  2. » Công Nghệ Thông Tin

tìm giá trị nhỏ nhất thứ k

2 2 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 2
Dung lượng 146,17 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài tập Cho dãy số nguyên dương {num} có n phần tử khác nhau từng đôi một và số nguyên k. Hãy tìm ra giá trị nhỏ nhất thứ k .INP Dòng đầu tiên chứa n và k ( 5101  nk ) Dòng tiếp theo là dãy {num} n phần tử cách nhau ( 1 num i 510 ) OUT Dòng duy nhất chứa giá trị nhỏ nhất thứ k INP.

Trang 1

Lưu ý: Tài liệu chỉ mang tính chất tham khảo, nếu có trường hợp chưa đúng đắn

có thể điều chỉnh, xin cảm ơn.

Tài liệu tham khảo từ Tài liệu giáo khoa tin Chuyên tin quyển 1(Dỗ Đức Đông-Lê Minh Hoàng-Nguyễn Thanh Tùng)

Bài tập: Cho dãy số nguyên dương {num} có n phần tử khác nhau từng đôi một và số

nguyênk Hãy tìm ra giá trị nhỏ nhất thứ k.

.INP: -Dòng đầu tiên chứa n và k (1kn105)

-Dòng tiếp theo là dãy {num} n phần tử cách nhau (1 numi 105)

.OUT: Dòng duy nhất chứa giá trị nhỏ nhất thứ k.

6 4

10 7

1 5 999 8 1000 23 3 223 43435 88 223

Hướng dẫn tham khảo:

Sắp xếp dãy theo giá trị tăng dần, số đứng thứ k của dãy là giá trị nhỏ thứ k cần tìm Với ví dụ trên, khi ta sắp xếp thì dãy được là 1 4 5 6 10 19 và phần tử thứ k = 4 mang giá trị bằng 6

Chúng ta sẽ tham khảo hai thuật toán sắp xếp là nổi bọt và quick sort (bạn nên tra cứu các thông tin của hai thuật toán này để dễ hiểu hơn ) Để hiệu quả hơn, ta chỉ cần sắp xếp đến phần tử thứ k mà không cần sắp xếp cả dãy

Thuật toán nổi bọt:

for u:= 1 to k do for v:= n downto u+1 do

if a[v-1] > a[v] then begin

t:=a[v];

a[v]:=a[v-1];

a[v-1]:=t;

end;

Kết quả: write(a[k]);

Thuật toán quick sort:

1 Nếu k<L<=H thì đoạn từ L đến H không cần sắp xếp vì đoạn này không ảnh hưởng đến vị trí thứ k

2 Nếu L<=H<k thì đoạn từ L đến H cũng không cần sắp xếp vì đoạn này không ảnh hưởng đến vị trí thứ k

3 Nếu L<=k <=H thì ta sẽ xử lí tiếp trong đoạn này

procedure QuickSort(L,H:longint);

var i,j :longint;

x,tmp :longint;

begin

if (L<=K) and (H>=K) then

begin

i:=L;

j:=H;

x:=a[(L+H) div 2];

Trang 2

while a[i]<x do inc(i); while a[j]>x do dec(j);

if i<=j then begin

tmp:=a[i];

a[i]:=a[j];

a[j]:=tmp;

inc(i);

dec(j);

end;

until i>j;

if L<j then QuickSort(L,j);

if i<H then QuickSort(i,H); end;

end;

Kết quả: write(a[k]);

Ngày đăng: 11/07/2022, 11:10

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w