Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 2 ThS. Phạn Nguyệt Thuần

143 323 0
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 2  ThS. Phạn Nguyệt Thuần

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 2 Tìm kiếm và sắp xếp nội do ThS. Phạn Nguyệt Thuần trình bày. Bài giảng trình bày về các nội dung: Các giải thuật tìm kiếm nội, các giải thuật sắp xếp nội. Mời các bạn cùng tham khảo nội dung chi tiết tài liệu.

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 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 Chèn trực tiếp – Insertion Sort Shell Sort Heap Sort Quick Sort Nhu cầu tìm kiếm xếp Thao tác tìm kiếm đƣợc sử dụng nhiều hệ lƣu trữ quản lý liệu  Do liệu lớn nên tìm giải thuật tìm kiếm nhanh chóng mối quan tâm hàng đầu Để đạt đƣợc điều liệu phải đƣợc tổ chức theo thứ tự việc tìm kiếm nhanh chóng hiệu hơn, nhu cầu xếp liệu đƣợc lƣu ý  Tóm lại, bên cạnh giải thuật tìm kiếm giải thuật xếp liệu thiếu hệ quản lý thông tin máy tính  Các giải thuật tìm kiếm Có giải thuật thƣờng đƣợc áp dụng: Tìm tuyến tính tìm nhị phân  Để đơn giản cho việc minh họa, ta đặc tả nhƣ sau:  a1 a2 a3 a4 a5 … an-1 aN ◦ Tập liệu đƣợc lƣu trữ dãy số a1, a2, ,aN ◦ Giả sử chọn cấu trúc liệu mảng để lƣu trữ dãy số nhớ chính, có khai báo: int a[N]; ◦ Khoá cần tìm x, đƣợc khai báo nhƣ sau: int x; 5 Tìm kiếm tuyến tính Ý tưởng Tiến hành so sánh x lần lƣợt với phần tử thứ nhất, thứ hai, mảng a gặp đƣợc phần tử có khóa cần tìm, tìm hết mảng mà không thấy x Chƣa  10 Minh họa tìm x =10 Đã tìm  12 41 10 32 13 15 3 10 Minh họa tìm x =25  25 12 41 10 32 13 15 3 10 hếttại thấy vịmảng trí Chƣa Đã hết hết mảng mảng Giải thuật Bước 1: i = 1; // phần tử dãy Bước 2: So sánh a[i] với x, có khả : ◦ a[i] = x : Tìm thấy Dừng ◦ a[i] != x : Sang Bước Bước 3: ◦ i = i+1; // xét tiếp phần tử kế mảng ◦ Nếu i >N: Hết mảng, không tìm thấy Dừng Ngược lại: Lặp lại Bước Cài đặt int LinearSearch(int a[], int N, int x) { int i=0; while ((i x) j ; if(i [...]... nghịch thế Swap(a[i], a[j]); } 29 Minh Họa – Đổi Chỗ Trực Tiếp j 1 12 2 8 5 1 6 4 15 0 i 1 2 3 4 5 6 7 30 Minh Họa – Đổi Chỗ Trực Tiếp j 1 12 2 8 5 2 6 4 15 0 i 1 2 3 4 5 6 7 0 31 Minh Họa – Đổi Chỗ Trực Tiếp j 1 2 4 12 8 5 6 4 15 0 1 i 2 3 4 5 6 7 0 32 Minh Họa – Đổi Chỗ Trực Tiếp j 1 2 4 5 12 8 6 5 15 0 1 2 i 3 4 5 6 7 0 33 Minh Họa – Đổi Chỗ Trực Tiếp j 1 0 2 1 4 2 5 12 6 8 6 15 3 i 4 5 6 7 0 34 Minh... 8 i=0 5 1 j=1 j=4 i=0 23 6 4 15 Đổi Chỗ Trực Tiếp–Interchange Sort i=1 i=1 i=1 j =2 j=3 24 j=4 Đổi Chỗ Trực Tiếp–Interchange Sort i =2 j=3 i =2 i =2 j=4 25 j=6 Đổi Chỗ Trực Tiếp–Interchange Sort i=3 i=3 i=3 26 j=4 j=5 j=6 Đổi Chỗ Trực Tiếp–Interchange Sort i=4 j=5 j=6 i=4 i=5 27 j=6 Đổi Chỗ Trực Tiếp–Interchange Sort i=6 28 j=7 Cài Đặt Đổi Chỗ Trực Tiếp void InterchangeSort(int a[], int N ) { int i, j;... kiếm hiện hành, dựa vào kết quả so sánh này mà ta quyết định giới hạn dãy tìm kiếm ở nữa dƣới hay nữa trên của dãy tìm kiếm hiện hành 12 Minh họa tìm x = 41 x x x 3 14 16 19 22 41 46 51 63 71 1 2 3 4 5 6 7 8 9 10 l Tìm thấy x tại vị trí 6 m r m m 13 Minh họa tìm x = 45 x x x x 3 14 16 19 22 41 46 51 63 71 1 2 3 4 5 6 7 8 9 10 l m m r l > r: Kết thúc: Không tìm thấy m m 14 Giải thuật Bƣớc 1: left =... do{ mid = (left + right) /2; if (x == a[mid]) return mid;//Thấy x tại mid else if (x < a[mid]) right = mid -1; else left = mid +1; }while (left

Ngày đăng: 26/10/2016, 20:59

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan