匯東網


NOJ - T0??

[編輯] [转简体]
|
作者:huidong | 分類:【編程】C 程序設計課程
[ 14 瀏覽 0 評論 3 贊 4 踩 ]

概要
循環排序

正文

这题我看了好半天,感觉 NOJ 对这个排序算法的描述有逻辑错误,且语义不明造成理解混乱。我觉得循环排序的意思就是这样:
1. 令 i = 0
2. 遍历 arr[i+1~end],找到有多少元素小于 arr[i],记为 pos
3. 若 pos == 0,那就说明 arr[i] 位置正确,令 i++,然后重复步骤 2,直到排完所有元素;若 pos > 0,则将 arr[i] 放到 arr[i+pos] 位置上,原先的 arr[i+pos] 被挤出来,那么把它放到 arr[i] 位置上,然后重复步骤 2。

事实上还可以做一点优化,即 arr[i+pos] 和 arr[i] 可以不需要换位,只需要引入一个 temp 变量临时存储每一次被挤出来的 arr[i+pos] ,然后用来进行步骤二的比较就行,这样就可以更好地满足循环排序的原本用途:最小化写入次数,以减少对昂贵存储器的损耗。


[ 3] [ 4]


 評論區  0 條評論

+ 添加評論