ในการจัดเรียงตัวเลขขนาดเล็กในเวลาเชิงเส้น เราสามารถใช้เทคนิคการเรียงลำดับการนับได้
การเรียงลำดับการนับเป็นเทคนิคการเรียงลำดับที่เสถียร ซึ่งใช้ในการเรียงลำดับวัตถุตามคีย์ที่เป็นตัวเลขขนาดเล็ก โดยจะนับจำนวนคีย์ที่มีค่าคีย์เท่ากัน เทคนิคการจัดเรียงนี้จะมีประสิทธิภาพเมื่อความแตกต่างระหว่างคีย์ต่างๆ มีขนาดไม่ใหญ่นัก มิฉะนั้น อาจเพิ่มความซับซ้อนของพื้นที่ได้
ความซับซ้อนของเทคนิคการเรียงลำดับการนับ
-
ความซับซ้อนของเวลา :O(n + r)
-
ความซับซ้อนของอวกาศ :O(n + r)
Input − A list of unsorted data: 2 5 6 2 3 10 3 6 7 8 Output − Array after Sorting: 2 2 3 3 5 6 6 7 8 10
อัลกอริทึม
countingSort(อาร์เรย์, ขนาด)
ป้อนข้อมูล − อาร์เรย์ของข้อมูลและจำนวนทั้งหมดในอาร์เรย์
ผลผลิต − อาร์เรย์ที่จัดเรียง
Begin max = get maximum element from array. define count array of size [max+1] for i := 0 to max do count[i] = 0 //set all elements in the count array to 0 done for i := 1 to size do increase count of each number which have found in the array done for i := 1 to max do count[i] = count[i] + count[i + 1] //find cumulative frequency done for i := size to 1 decrease by 1 do store the number in the output array decrease count[i] done return the output array End
โค้ดตัวอย่าง
#include <iostream> using namespace std; void counting_sort(int array[], int n) { int i, j; int count[n]; for (i = 0; i < n; i++) count[i] = 0; for (i = 0; i < n; i++) (count[array[i]])++; for (i = 0, j = 0; i < n; i++) for (; count[i] > 0; (count[i])--) array[j++] = i; } int main() { int array[100], i, num; cout << "Enter the size of array : "; cin >> num; cout << "Enter the " << num << " elements to be sorted:" << endl; for (i = 0; i < num; i++) cin >> array[i]; cout << "\nThe array of elements before sorting : " <<endl; for (i = 0; i < num; i++) cout << array[i] << " "; cout << "\nThe array of elements after sorting : " << endl; counting_sort(array, num); for (i = 0; i < num; i++) cout << array[i] << " "; return 0; }
ผลลัพธ์
Enter the size of array : 8 Enter the 8 elements to be sorted: 54 89 23 20 18 88 65 31 The array of elements before sorting : 54 89 23 20 18 88 65 31 The array of elements after sorting : 54 89 23 20 18 88 65 31