Sp đm (Counting sort)

Một phần của tài liệu Bài giảng cấu trúc dữ liệu thuật toán chương 5 nguyễn đức nghĩa (Trang 84)

M đ u: Sp xp trong thi gian tuy n tính

5.7.2. Sp đm (Counting sort)

Input: n s nguyên trong kho ng [0..k] trong đó k là s nguyên và k = O(n). • Ý t ng: v i m i ph n t x c a dãy đ u vào ta xác đ nh h ng (rank) c a nó nh là s l ng ph n t nh h n x. • M t khi ta đã bi t h ng r c a x, ta có th x p nó vào v trí r+1. • d : N u có 6 ph n t nh h n 17, ta có th x p 17 vào v trí th 7. • L p: khi có m t lo t ph n t có cùng giá tr , ta s p x p chúng theo th t xu t hi n trong dãy ban đ u (đ có đ c tính n đ nh c a s p x p).

Cài đ t

void countSort(int a[],int b[],int c[],int k) {

// k - giá tr ph n t l n nh t

// m: b[i] - s ph n t có giá tr i

for (int i=0; i <= k; i++) b[i] = 0; for (i=0; i<n; i++) b[a[i]]++;

// Tính h ng: b[i] h ng c a ph n t có giá tr i for (i = 1; i <= k; i++) b[i] += b[i - 1]; // S p x p for (i = n-1; i >= 0; i--) { c[b[a[i]] - 1] = a[i]; b[a[i]] = b[a[i]] - 1; } } 169 NGUY N C NGH A B môn KHMT - HBKHN Ch ng trình demo

/* include <iostream.h, stdlib.h, stdio.h, conio.h, process.h, time.h */

int a[10000], c[10000]; int n; void print(int a[], int n) {

for (int i = 0; i < n; i++) printf("%8i", a[i]); printf("\n");

}

void countSort(int a[], int b[], int c[], int amax); void main() {

int i, k; // gia tri lon nhat co the cua mang A clrscr(); randomize();

printf("\ n n = "); scanf("%i",&n); printf("\ n max = "); scanf("%i",&k); for (i = 0; i < n; i++) a[i] = rand() % k; printf("\n Day ban dau:\n"); print(a,n);

int * b; int amax = 0;

// Tinh phan tu lon nhat amax

for (i = 0; i < n; i++)

if (a[i] > amax) amax = a[i]; b = new int[amax];

countSort(a, b, c, amax);

printf("\n Day ket qua:\n");print(c,n); // Verify result array

c[n]=32767;

for (i = 0; i < n; i++) if (c[i]>c[i+1]) {

printf(" ??????? Loi o vi tri: %6i ", i); getch(); }

printf("\n Correct!"); getch(); }

170

NGUY N C NGH AB môn KHMT - HBKHN B môn KHMT - HBKHN

Một phần của tài liệu Bài giảng cấu trúc dữ liệu thuật toán chương 5 nguyễn đức nghĩa (Trang 84)

Tải bản đầy đủ (PDF)

(94 trang)