Danh sách tự tổ chức về cơ bản cập nhật danh sách các phạm vi mục nhất định trên cơ sở mục được tìm kiếm cuối cùng. Trong phương pháp này, phương pháp tìm kiếm tuần tự được sử dụng. Thuật toán này chuyển dữ liệu quan trọng hơn lên đầu danh sách. Độ phức tạp về thời gian của kỹ thuật tìm kiếm này là O (n).
Thuật toán
Bắt đầu Hàm FibonacciSearch (). Tính giá trị giữa bằng cách sử dụng biểu thức ‘start + fib [index-2]’. Nếu mục đã chọn bằng với giá trị ở chỉ mục giữa, hãy in kết quả và trở về chính. Nếu nó nhỏ hơn giá trị ở chỉ mục giữa, hãy tiếp tục với mảng con bên trái. Nếu nó lớn hơn giá trị ở chỉ mục giữa, hãy tiếp tục với mảng con bên phải. Nếu giá trị giữa được tính bằng giá trị bắt đầu hoặc kết thúc thì mục đó không được tìm thấy trong mảng.Mã mẫu
#includeusing namespace std; struct node {int d; node * next;}; node * CreateNode (int d) {node * newnode =new node; newnode-> d =d; newnode-> next =NULL; return newnode;} node * InsertIntoList (node * head, int d) {node * temp =CreateNode (d); nút * t =nút mới; t =cái đầu; if (head ==NULL) {head =temp; quay trở lại đầu; } else {while (t-> next! =NULL) t =t-> next; t-> next =temp; } return head;} void Display (node * head) {node * temp =new node; temp =cái đầu; cout <<"\ n Trạng thái danh sách là:"; while (temp-> next! =NULL) {cout <<"->" < d; temp =temp-> tiếp theo; }} node * SearchItem (node * head, int item) {int flag =0; nút * temp =nút mới; nút * t =nút mới; temp =cái đầu; if (temp-> d ==item) {cout <<"\ nTìm thấy mục ở đầu nút"; cờ =5; Hiển thị (đầu); quay trở lại đầu; } else {while ((temp-> next) -> next! =NULL) {if ((temp-> next) -> d ==item) {cout <<"\ nItem found"; cờ =5; phá vỡ; } temp =temp-> tiếp theo; } t =(temp-> tiếp theo) -> tiếp theo; (temp-> next) -> next =head; đầu =temp-> tiếp theo; temp-> next =t; if (cờ ==5) Hiển thị (đầu); else cout <<"\ nKhông tìm thấy mục."; } return head;} int main () {int i, n; char ch; nút * head =nút mới; đầu =NULL; for (i =1; i <20; i ++) head =InsertIntoList (head, i); Hiển thị (đầu); up:cout <<"\ nNhập Phần tử cần tìm:"; cin>> n; head =SearchItem (head, n); cout <<"\ n \ n \ tBạn có muốn tìm kiếm thêm ... nhập lựa chọn (y / n)?"; cin>> ch; if (ch =='y' || ch =='Y') đi lên; trả về 0;} Đầu ra
Trạng thái danh sách là:-> 1-> 2-> 3-> 4-> 5-> 6-> 7-> 8-> 9-> 10-> 11-> 12-> 13-> 14 -> 15-> 16-> 17-> 18Nhập phần tử cần tìm:7Tìm thấy mục Trạng thái danh sách là:-> 7-> 1-> 2-> 3-> 4-> 5-> 6-> 8-> 9-> 10-> 11-> 12-> 13-> 14-> 15-> 16-> 17-> 18Bạn có muốn tìm kiếm thêm ... nhập lựa chọn (y / n)? YNhập phần tử cần tìm :20 Không tìm thấy mục. Bạn có muốn tìm kiếm thêm ... nhập lựa chọn (y / n)? N