Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อใช้งาน Radix Sort


Radix sort เป็นอัลกอริธึมการเรียงลำดับแบบไม่เปรียบเทียบ อัลกอริธึมการเรียงลำดับนี้ทำงานบนคีย์จำนวนเต็มโดยการจัดกลุ่มตัวเลขซึ่งมีตำแหน่งและค่าเหมือนกัน ฐานเป็นฐานของระบบตัวเลข อย่างที่เราทราบดีว่าในระบบทศนิยม ฐานหรือฐานคือ 10 ดังนั้นสำหรับการจัดเรียงตัวเลขทศนิยม เราต้องใช้กล่องตำแหน่ง 10 ช่องเพื่อเก็บตัวเลข

ความซับซ้อนของเทคนิคการจัดเรียง Radix

  • ความซับซ้อนของเวลา:O(nk)

  • ความซับซ้อนของอวกาศ:O(n+k)

Input − The unsorted list: 802 630 20 745 52 300 612 932 78 187
Output − Data after Sorting: 20 52 78 187 300 612 630 745 802 932

อัลกอริทึม

radixSort(อาร์เรย์ ขนาด maxDigit)

ป้อนข้อมูล :อาร์เรย์ของข้อมูล และจำนวนทั้งหมดในอาร์เรย์ จำนวนหลักของจำนวนสูงสุด

ผลผลิต :เรียงลำดับอาร์เรย์

Begin
   define 10 lists as pocket
   for i := 0 to max -1 do
      m = 10i+1
      p := 10i
      for j := 0 to n-1 do
      temp := array[j] mod m
      index := temp / p
      pocket[index].append(array[j])
   done
   count := 0
   for j := 0 to radix do
      while pocket[j] is not empty
         array[count] := get first node of pocket[j] and delete it
         count := count +1
      done
   done
End

โค้ดตัวอย่าง

#include<iostream>
#include<list>
#include<cmath>
using namespace std;
void display(int *array, int size) {
   for(int i = 0; i<size; i++)
      cout << array[i] << " ";
   cout << endl;
}
void radixSort(int *arr, int n, int max) {
   int i, j, m, p = 1, index, temp, count = 0;
   list<int> pocket[10];      //radix of decimal number is 10
   for(i = 0; i< max; i++) {
      m = pow(10, i+1);
      p = pow(10, i);
      for(j = 0; j<n; j++) {
         temp = arr[j]%m;
         index = temp/p;      //find index for pocket array
         pocket[index].push_back(arr[j]);
      }
      count = 0;
      for(j = 0; j<10; j++) {
         //delete from linked lists and store to array
         while(!pocket[j].empty()) {
            arr[count] = *(pocket[j].begin());
            pocket[j].erase(pocket[j].begin());
            count++;
         }
      }
   }
}
int main() {
   int n, max;
   cout << "Enter the number of elements: ";
   cin >> n;
   cout << "Enter the maximum digit of elements: ";
   cin >> max;
   int arr[n]; //create an array with given number of elements
   cout << "Enter elements:" << endl;
   for(int i = 0; i<n; i++) {
      cin >> arr[i];
   }
   cout << "Data before Sorting: ";
   display(arr, n);
   radixSort(arr, n, max);
   cout << "Data after Sorting: ";
   display(arr, n);
}

ผลลัพธ์

Enter the number of elements: 10
Enter the maximum digit of elements: 3
Enter elements:
802 630 20 745 52 300 612 932 78 187
Data before Sorting: 802 630 20 745 52 300 612 932 78 187
Data after Sorting: 20 52 78 187 300 612 630 745 802 932