Đếm sắp xếp là một kỹ thuật sắp xếp ổn định, được sử dụng để sắp xếp các đối tượng theo các khóa là số nhỏ. Nó đếm số lượng khóa có giá trị chính giống nhau. Kỹ thuật sắp xếp này có hiệu quả khi sự khác biệt giữa các khóa khác nhau không quá lớn, nếu không, nó có thể làm tăng độ phức tạp của không gian.
Độ phức tạp của Kỹ thuật sắp xếp đếm
- Độ phức tạp về thời gian:O (n + r)
- Độ phức tạp của không gian:O (n + r)
Đầu vào và Đầu ra
Đầu vào:Danh sách dữ liệu chưa được sắp xếp:2 5 6 2 3 10 3 6 7 8 Đầu ra:Mảng trước Sắp xếp:2 5 6 2 3 10 3 6 7 8 Mảng sau Sắp xếp:2 2 3 3 5 6 6 7 8 10
Thuật toán
sắp xếp đếm (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
Begin max =lấy phần tử tối đa từ mảng. xác định mảng đếm có kích thước [max + 1] cho i:=0 đến tối đa do đếm [i] =0 // đặt tất cả các phần tử trong mảng đếm thành 0 được thực hiện cho i:=1 thành kích thước để tăng số lượng từng số đã tìm thấy trong mảng được thực hiện cho i:=1 to max do count [i] =count [i] + count [i + 1] // tìm tần suất tích lũy được thực hiện cho i:=kích thước xuống 1 giảm 1 do lưu trữ số trong mảng đầu ra giảm đếm [i] xong trả về mảng đầu raEnd
Ví dụ
#include#include using namespace std; void display (int * array, int size) {for (int i =1; i <=size; i ++) cout < max) max =array [i]; } trả về giá trị tối đa; // phần tử tối đa từ mảng} void countSort (int * array, int size) {int output [size + 1]; int max =getMax (mảng, kích thước); int count [max + 1]; // tạo mảng đếm (max + 1 số phần tử) for (int i =0; i <=max; i ++) count [i] =0; // khởi tạo mảng đếm thành tất cả 0 for (int i =1; i <=size; i ++) count [array [i]] ++; // tăng số đếm trong mảng đếm. for (int i =1; i <=max; i ++) count [i] + =count [i-1]; // tìm tần số tích lũy for (int i =size; i> =1; i--) {output [count [array [i]]] =array [i]; count [array [i]] - =1; // giảm số lượng cho các số giống nhau} for (int i =1; i <=size; i ++) {array [i] =output [i]; // lưu mảng xuất vào mảng chính}} int main () {int n; cout <<"Nhập số phần tử:"; cin>> n; int arr [n + 1]; // tạo mảng với số phần tử cho trước cout <<"Nhập các phần tử:" < > arr [i]; } cout <<"Mảng trước khi Sắp xếp:"; hiển thị (arr, n); countSort (arr, n); cout <<"Mảng sau khi Sắp xếp:"; display (arr, n);}
Đầu ra
Nhập số phần tử:10Nhập phần tử:2 5 6 2 3 10 3 6 7 8Mảng trước Sắp xếp:2 5 6 2 3 10 3 6 7 8Mảng sau Sắp xếp:2 2 3 3 5 6 6 7 8 10