如何在没有新数组的情况下对数组进行排序?

hoh*_*o97 2 java sorting

我正在做我的作业,并且有一个问题要求我们对结构数组进行排序

结构citizen由a int id和a组成boolean gender,其中id随机生成1到100之间,gender由if id是奇数还是偶数,奇数= true(男性)和偶数= false(女性)确定

例如 a = {33, true}

这个问题要求我citizen[]按性别对数组进行排序,看起来很容易,但它有以下要求:

以线性时间运行O(N)

没有新阵列

只能使用恒定的额外空间

我正在考虑使用计数排序但是如果没有新阵列似乎有点困难,有什么建议吗?

Jim*_*son 8

由于这是一个家庭作业问题,我不打算提供代码.以下内容足以让您入门.

按性别"排序"实际上意味着分成两组.通用排序不能比O(n*log(n))更好,但是可以在具有恒定空间的O(n)中进行分区.

考虑同时从两端迭代(while循环,两个索引指针初始化为first和last元素),寻找"错误"部分中的元素.当你在每一端找到一个这样的元素时,交换它们.请注意,指针只在跳过已经在右边部分的元素时才会相互独立移动,当然也可以在交换后立即移动,这是"已经在右边部分中的元素"的子例.

当索引指针在中间某处相遇时退出.

这不是一般目的.如果密钥数量未知,则无法执行此操作.