Đây là một ví dụ về kỹ thuật sắp xếp không so sánh. Nó được sử dụng khi số lượng mục và phạm vi của các giá trị khóa có thể là gần giống nhau.
Để thực hiện phân loại này, chúng ta cần tạo một số lỗ. Số lượng lỗ cần thiết được quyết định bởi phạm vi số lượng. Trong mỗi lỗ, các mục được chèn vào. Cuối cùng được xóa khỏi lỗ và được lưu trữ thành một mảng để sắp xếp thứ tự.
Sự phức tạp của Kỹ thuật sắp xếp theo lỗ của chim bồ câu
- Độ phức tạp về thời gian:O (n + 2 ^ k)
- Độ phức tạp của không gian:O (2 ^ k)
Đầu vào và Đầu ra
Đầu vào:Danh sách chưa được sắp xếp:802 630 20 745 52 300 612 932 78 187 Đầu ra:Dữ liệu trước khi sắp xếp:802 630 20 745 52 300 612 932 78 187 Dữ liệu sau khi sắp xếp:20 52 78 187 300 612 630 745 802 932
Thuật toán
pigeonHoleSort (mảng, kích thước)
Đầu vào - Một mảng dữ liệu và tổng số trong mảng
Đầu ra - Mảng được sắp xếp
Bắt đầu tìm tối đa và tối thiểu từ danh sách mảng lỗ ]) đếm xong:=0 cho j:=0 thành lỗRange-1 do trong khi lỗ [j] không trống do mảng [đếm]:=lấy nút đầu tiên của lỗ [j] và xóa đi doneEnd
Ví dụ
#include#include #include
using namespace std; void getMaxMin (int * arr, int n, int &Maximum, int &Minimum) {Maximum =Minimum =arr [0]; // ban đầu max và min arr [0] for (int i =1; i Maximum) Maximum =arr [i]; // lấy dữ liệu tối đa if (arr [i] lỗ [holeRange]; // tạo mảng lỗ for (int i =0; i > n; int arr [n]; // tạo mảng với số phần tử cho trước cout <<"Nhập các phần tử:" < > arr [i]; } cout <<"Dữ liệu trước khi sắp xếp:"; hiển thị (arr, n); pegionHoleSort (arr, n); cout <<"Dữ liệu sau khi Sắp xếp:"; display (arr, n);}
Đầu ra
Nhập số phần tử:10 Nhập phần tử:802 630 20 745 52 300 612 932 78 187 Dữ liệu trước Sắp xếp:802 630 20 745 52 300 612 932 78 187 Dữ liệu sau Sắp xếp:20 52 78 187 300 612 630 745 802 932