Menu
CoddyTech

Mã giả

Bài học 4 trên 9 trong khóa học Sắp xếp cơ số, chuỗi DSA của Coddy.

countingSortByDigit(array, exp):
   n = length(array)
   output = array of size n
   count = array of 10 zeros
   for each x in array:                 # tally each digit
      count[(x / exp) % 10] += 1
   for d from 1 to 9:                   # running totals -> positions
      count[d] += count[d - 1]
   for k from n-1 down to 0:            # place from the back (stable)
      d = (array[k] / exp) % 10
      count[d] -= 1
      output[count[d]] = array[k]
   return output

radixSort(array):
   max = largest value in array
   exp = 1
   while max / exp > 0:
      array = countingSortByDigit(array, exp)
      exp = exp * 10
  • exp là giá trị hàng: 1 cho hàng đơn vị, 10 cho hàng chục, 100 cho hàng trăm. (x / exp) % 10 lấy chữ số đó.
  • countingSortByDigit là thuật toán sắp xếp ổn định theo một chữ số: đếm số lần xuất hiện của từng chữ số, chuyển các số đếm thành vị trí, rồi đặt các phần tử từ sau ra trước để giữ nguyên thứ tự.
  • radixSort chỉ chạy lượt đó một lần cho mỗi chữ số, dừng khi exp vượt qua số lớn nhất.

Tự làm thử

Bài học này không có thử thách code.

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Sắp xếp cơ số, chuỗi DSA

Tự luyện tập: Trình biên dịch C online