Mar*_*k K 10 javascript c c++ java algorithm
只是想重新排列数组中的数据,以便类似的项目不在每个数据旁边.不应该从数组中删除数据,如果无法重新排列,则可以将数据放在数组的末尾.但保持原始秩序是必要的.
例
1 1 2 => 1 2 1
1 1 1 2 3 => 1 2 1 3 1
1 1 2 1 3 3 5 1 => 1 2 1 3 1 3 5 1
1 1 1 1 1 1 2 => 1 2 1 1 1 1 1
8 2 1 3 7 2 5 => rearrange not needed
8 2 2 2 7 2 5 2 => 8 2 7 2 5 2 2 // keep the original order
Run Code Online (Sandbox Code Playgroud)
编辑:添加示例以显示需要保持原始顺序
使用较高的对映对应物在小的偶数索引处交换元素:
for ( i=0; i < arr.length/2; i+=2 )
arr.swap(i,arr.length-1-i);
Run Code Online (Sandbox Code Playgroud)编辑:好的,我们应该重新定义对映对手.也许这个更好:混合第一和第三四分位数(在图中表示为x,y),以及混合第二和第三四分位数(表示为u,v,w).让对手提升平行.
25% 50% 75%
| | |
-----[----[----[----
11122334455667788999
x y u v w x y u v w <-- u, v, w, x, y indicate swap positions
16172839495161738495
Run Code Online (Sandbox Code Playgroud)
唔。我想到了冒泡排序,但需要进行三元素比较;也就是说,如果item[x]和item[x + 1]相同且item[x + 2]不同,则交换item[x + 1]和item[x + 2]。重复遍历列表,直到没有交换发生。当然,执行顺序很糟糕,但这应该可以满足您的需求。