为我的算法编写伪代码

时间:2014-12-11 11:29:33

标签: java arrays sorting

我已经实现了计数排序,我正在努力为我的算法的最后一步编写伪代码。

我的代码如下:

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

  • DECLARE MIN作为A
  • 中的第一个元素
  • DECLARE MAX as MIN
  • 通过A

    中的元素循环播放
    • 如果当前元素小于MIN
      • SET MIN to current element
    • ELSE如果当前元素大于MAX
      • SET MAX为当前元素
  • 初始化频率数组

  • DECLARE数组C(计数)的大小(MAX - MIN + 1)
  • 计算每个元素的频率
  • 通过A

    中的元素循环播放
    • C [array [i] -min]增加1
  • 重新计算数组 - 创建出现的数组

  • 将C [0]减少1
  • 通过C

    中的元素循环播放
    • C [i] = C [i] -C [i-1]
  • 对数组进行排序

  • 在出现的数组中查找给定值的最后一次出现

  • 通过出现数组中的元素循环
  • 将其放入已排序的数组
  • 减少给定值的最后一次出现的索引
  • 继续输入数组的前一个值(转到:1),如果所有值都已经排序则终止

0 个答案:

没有答案