プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

基数ソート


基数ソートは、非比較のソートアルゴリズムです。この並べ替えアルゴリズムは、同じ位置と値を共有する数字をグループ化することにより、整数キーで機能します。基数は、記数法のベースです。 10進法では、基数または基数は10であることがわかっているので、いくつかの10進数を並べ替えるには、数値を格納するために10個の位置ボックスが必要です。

基数ソート手法の複雑さ

  • 時間計算量:O(nk)
  • スペースの複雑さ:O(n + k)

入力と出力

Input:
The unsorted list: 802 630 20 745 52 300 612 932 78 187
Output:
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
>

アルゴリズム

radixSort(array, size, maxDigit)

入力- データの配列、および配列内の総数、最大数の桁数

出力- 並べ替えられた配列。

Begin
   define 10 lists as pocket
   for i := 0 to max -1 do
      m = 10^i+1
      p := 10^i
      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

  1. 基数ソートのCプログラム

    並べ替えアルゴリズム は、リストのコンポーネントを特定の順序で配置するアルゴリズムです。最もよく使用される順序は、番号順と辞書式順序です。 基数 sortは、非比較のソートアルゴリズムです。基数ソートアルゴリズムは、ソートされていないリストに最も適したアルゴリズムです。 同じ場所の値の個々の数字を最初にグループ化することにより、要素を並べ替えます。基数ソートの考え方は、最下位桁(LSD)から最上位桁(MSD)まで桁ごとにソートすることです。 、昇順/降順による。基数ソートは、特大の名前のリストをアルファベット順に並べ替えるときに数回使用される小さな方法です。具体的には、名前のリストは最初に

  2. KeyValuePairsをC#で並べ替える

    Sortメソッドを使用して、KeyValuePairsコレクションを並べ替えます。 まず、コレクションを設定します- var myList = new List<KeyValuePair<int, int>>(); // adding elements myList.Add(new KeyValuePair<int, int>(1, 20)); myList.Add(new KeyValuePair<int, int>(2, 15)); myList.Add(new KeyValuePair<int, int>(3, 35));