我已经实现了计数排序,我正在努力为我的算法的最后一步编写伪代码。
我的代码如下:
public int[] countingSort(int[]array) {
int[] aux = new int[array.length];
// find the smallest and the largest value
int min = array[0];
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] < min) min = array[i];
else if (array[i] > max) max = array[i];
}
// init array of frequencies
int[] counts = new int[max - min + 1];
// init the frequencies
for (int i = 0; i < array.length; i++) {
counts[array[i] - min]++;
}
// recalculate the array - create the array of occurences
counts[0]--;
for (int i = 1; i < counts.length; i++) {
counts[i] = counts[i] + counts[i-1];
}
// Sort the array right to the left
// 1) look up in the array of occurences the last occurence of the given value
// 2) place it into the sorted array
// 3) decrement the index of the last occurence of the given value
// 4) continue with the previous value of the input array (goto: 1), terminate if all values were already sorted
for (int i = array.length - 1; i >= 0; i--) {
aux[counts[array[i] - min]--] = array[i];
}
return aux;
}
我的伪代码如下:
程序:计算排序
输入:数组(A) 步骤进行:
计算出arrray中的min和max
通过A
中的元素循环播放初始化频率数组
通过A
中的元素循环播放重新计算数组 - 创建出现的数组
通过C
中的元素循环播放对数组进行排序
在出现的数组中查找给定值的最后一次出现