首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非常非常粗糙的排序

非常非常粗糙的排序
EN

Stack Overflow用户
提问于 2010-12-01 14:35:46
回答 3查看 185关注 0票数 2

假设我们有一个数组( int[] m )。

我需要整理它..。结果必须为:

前半部分中的所有项目必须小于或等于后半部分中的任何项目。

怎么做呢?...

EN

回答 3

Stack Overflow用户

发布于 2010-12-01 14:55:02

正如卡尔已经在他的评论中提到的,这项任务等同于quicksort algorithm 中的拆分步骤,但例外,您必须首先找到样本中值并将其用作枢轴元素。

计算一个对数可以用O(n)次操作来计算,划分步骤也是线性的(O(n)),因此总体最坏情况下的性能仍然好于完全排序(O(n median (N)。

算法将如下所示(需要实现标准方法):

代码语言:javascript
复制
public int[] roughSort(int[] input) {
  int pivot = findMedian(input);
  int[] result = partition(input, pivot);
  return result;
}
票数 6
EN

Stack Overflow用户

发布于 2010-12-01 14:39:58

代码语言:javascript
复制
   Arrays.sort(array);
    for (int i : array) {
      System.out.println(i);
    }

对你的情况来说,按升序排序是可以的。

票数 4
EN

Stack Overflow用户

发布于 2010-12-01 15:12:46

代码语言:javascript
复制
List<Integer> list = new ArrayList<Integer>();

list.add(2);
list.add(5);
list.add(1);
list.add(15);
list.add(55);
list.add(23);

Collections.sort(list);

int length = list.size();

List<Integer> list1 = list.subList(0, length/2);
List<Integer> list2 = list.subList(length/2, length);

Collections.shuffle(list1);
Collections.shuffle(list2);

List<Integer> newList = new ArrayList<Integer>();
newList.addAll(list1);
newList.addAll(list2);

System.out.println(newList);

这是你想要的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4321837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档