public static void ReportDistributiveSort(int n) {
    if (sortingThread != null && sortingThread.isAlive()) return;
    int bas = 10;
    if (n != 3 && !(n >= 5))
      if (n != 4)
        try {
          bas = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter Base for Sort"));
        } catch (Exception e) {
        }
      else
        try {
          bas = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter Size of Partitions"));
        } catch (Exception e) {
        }

    final int base = Math.max(bas, 2);
    final int num = n;
    SetSound(true);
    sortingThread =
        new Thread() {
          @Override
          public void run() {
            try {
              refresharray();
              heading = DistributiveSorts[num] + " Sort";
              switch (num) {
                case 0:
                  radixLSDsort(base);
                  break;
                case 1:
                  radixMSDSort(base);
                  break;
                case 2:
                  RadixLSDInPlace.inPlaceRadixLSDSort(base);
                  break;
                case 3:
                  gravitySort();
                  break;
                case 4:
                  shatterSort(base);
                  break;
              }
            } catch (Exception e) {
            }
            SetSound(false);
          }
        };
    sortingThread.start();
  }