Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 计数排序算法可以简化吗_Algorithm_Sorting - Fatal编程技术网

Algorithm 计数排序算法可以简化吗

Algorithm 计数排序算法可以简化吗,algorithm,sorting,Algorithm,Sorting,为了更好地表达我的想法,我们设置: A[]-需要排序的原始数字数组 B[]-辅助数组,B[]的最大索引最大 以[]表示的价值 C[]-与[]具有相同长度的结果数组 例如,我们有一个值为{3,2,4,1,2}的[5] 首先我们将计算B[5]中每个值的频率,得到 {0,1,2,1,1} 然后我们需要通过将B[i]与B[i-1]相加来计算小于或等于A[i]的数字量。所以B现在变成{0,1,3,4,5} 我们转到A[i]并检查B[A[i]]中的值,以检查有多少个数字小于或等于A[i],然后C[B[A

为了更好地表达我的想法,我们设置:

  • A[]-需要排序的原始数字数组
  • B[]-辅助数组,B[]的最大索引最大 以[]表示的价值
  • C[]-与[]具有相同长度的结果数组
例如,我们有一个值为{3,2,4,1,2}的[5]

  • 首先我们将计算B[5]中每个值的频率,得到 {0,1,2,1,1}
  • 然后我们需要通过将B[i]与B[i-1]相加来计算小于或等于A[i]的数字量。所以B现在变成{0,1,3,4,5}
  • 我们转到A[i]并检查B[A[i]]中的值,以检查有多少个数字小于或等于A[i],然后C[B[A[i]-1]=A[i],B[A[i]=B[A[i]--(i从最大值到0)

  • 我的问题是为什么我们需要第二步和第三步?相反,为什么我们不在步骤1中检查频率并将B的索引值插入C中B[i]次,以直接获得排序后的数组C?

    当您说“直接插入”时,您的意思是我们应该跳过上述步骤之一吗,或者你的意思是我们下一步应该在C中插入数字?在数组B中创建频率后,下一步将直接将数字存储到数组C中,以获得已排序的数组。所以你在课堂上读到或听说过的一些东西建议在创建频率数组B和将数字存储到数组C之间再跨出一步?在这个过程中,数组C的索引是递增的,在频率边界上,它最终表示小于A[i]的数字量,这是问题吗?@user2357112我的意思是,我在书中看到的以下步骤是将B转换为{0,1,3,4,5},将每个元素与前一个元素相加,然后C[B[A[i]=A[i]. 我的问题是,为什么我们不把B的i插入C中,在B仍然是{0,1,2,1,1}的情况下,把B的i次插入C中,这看起来简单多了。@Jiang:是的,这很有效。你的书使事情变得不必要的复杂化了。@rcgldr很抱歉造成混淆。为了更好地表达我的想法,我编辑了这个问题。我想把第二步和第三步改为一步