Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 187 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
187
Dung lượng
1,79 MB
Nội dung
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT CHƢƠNG TÌM KIẾM VÀ SẮP XẾP NỘI Nội Dung Các giải thuật tìm kiếm nội Tìm kiếm tuyến tính CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Tìm kiếm nhị phân Các giải thuật xếp nội Đổi chỗ trực tiếp – Interchange Sort Chọn trực tiếp – Selection Sort Nổi bọt – Bubble Sort Nội Dung (Tt) Chèn trực tiếp – Insertion Sort Chèn nhị phân – Binary Insertion Sort CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Shaker Sort Shell Sort Heap Sort Quick Sort 10 Merge Sort 11 Radix Sort Bài Toán Tìm Kiếm Cho danh sách có n phần tử a0, a1, a2…, an-1 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Để đơn giản việc trình bày giải thuật ta dùng mảng chiều a để lưu danh sách phần tử nói nhớ Tìm phần tử có khố X mảng Giải thuật tìm kiếm tuyến tính (tìm tuần tự) Giải thuật tìm kiếm nhị phân Lưu ý: Trong trình trình bày thuật giải ta dùng ngơn ngữ lập trình C Tìm Kiếm Tuyến Tính CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Ý tƣởng : So sánh X với phần tử thứ 1, thứ 2,…của mảng a gặp khóa cần tìm, tìm hết mảng mà khơng thấy Các bƣớc tiến hành • • • Bước 1: Khởi gán i=0; Bước 2: So sánh a[i] với giá trị x cần tìm, có khả + a[i] == x tìm thấy x Dừng; + a[i] != x sang bước 3; Bước 3: i=i+1 // Xét tiếp phần tử mảng Nếu i==N: Hết mảng Dừng; Ngược lại: Lặp lại bước 2; Thuật Toán Tìm Kiếm Tuyến Tính CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Hàm trả tìm thấy, ngược lại trả 0: int LinearSearch(int a[],int n, int x) { int i=0; while((i0)&&(nc>0)) { kb=min(k,nb); kc=min(k,nc); if(b[pb+ib]