Java 获取基数/计数排序以处理负数

Java 获取基数/计数排序以处理负数,java,algorithm,sorting,radix-sort,counting-sort,Java,Algorithm,Sorting,Radix Sort,Counting Sort,我正在学习编程,如果我遗漏了一些明显的东西,请原谅。 我有一个基本的LSD基数排序和计数排序对。 我如何将其转换为负数? 这种计数排序方式是否可行,或者我是否需要另一种 void radixsort(int arr[], int n) { int m = getMaxElement(arr, n);//Find the maximum number in array. for (int exp = 1; m/exp > 0; exp *= 10) Count

我正在学习编程,如果我遗漏了一些明显的东西,请原谅。 我有一个基本的LSD基数排序和计数排序对。 我如何将其转换为负数? 这种计数排序方式是否可行,或者我是否需要另一种

void radixsort(int arr[], int n) {
   int m = getMaxElement(arr, n);//Find the maximum number in array.   

   for (int exp = 1; m/exp > 0; exp *= 10)
      CountSort(arr, n, exp);
}

void CountSort(int arr[], int n, int exp) {

   int output[n];
   int i, c[10] = {0}; // store the number of times in c[]

   for (i = 0; i < n; i++)
      c[ (arr[i]/exp)%10 ]++;


   for (i = 1; i < 10; i++)
      c[i] +=c[i - 1];
   // Making the output array
   for (i = n - 1; i >= 0; i--) {
      output[count[ (arr[i]/exp)%10 ] - 1] = arr[i];
      c[ (arr[i]/exp)%10 ]--;
}

   for (i = 0; i < n; i++)
      arr[i] = output[i];
}
void radixsort(int-arr[],int-n){
int m=getMaxElement(arr,n);//查找数组中的最大数。
对于(int exp=1;m/exp>0;exp*=10)
CountSort(arr,n,exp);
}
void CountSort(int arr[],int n,int exp){
整数输出[n];
int i,c[10]={0};//在c[]中存储次数
对于(i=0;i=0;i--){
输出[count[(arr[i]/exp)%10]-1]=arr[i];
c[(arr[i]/exp)%10]-;
}
对于(i=0;i
您可以将符号视为一个单独的数字,即最重要的数字。因此,您的最后一次传递将只有两个桶-负和非负


您需要做的一件不同的事情是以相反的顺序将数字从负数桶移动到最终数组(因为前面的过程忽略了符号,所以负数按其绝对值排序,这意味着顺序相反)。

您可以在排序前后切换符号位。