我需要在Java中实现以下内容。

输入:整数数组

输出:重新排列数组以具有以下内容:

假设原始数组中的第一个元素的值为x

在新数组中,假设x在位置I,即data[I] = x。然后,对所有x和所有j > I使用data[j] <= x。这意味着x的"左侧"的所有值均小于或等于x,而"右侧"的所有值均大于x。

一个示例如下:假设数组具有以下初始顺序的元素:4,3,9,2,7,6,5。应用算法后,您将获得:3,2,4,5,9,7,6。也就是说,最左边的元素4放置在结果数组中,以便所有小于4(2和3)的元素都位于其左侧(不按特定顺序排列),所有大于4的元素都位于其右侧(以没有特定的顺序)。

该算法没有空间要求,只是可以在O(n)时间内解决问题。

我已经实现了存储桶排序,但是在代码方面遇到了一些困难。

public class Problem4

{

public static void partition(int[] A)

{

int x = A[0];

int l = A.length;

int[] bucket = int [];

for(int i=0; i

bucket[i]=0;

}

for (int i=0; i

bucket[x[i]]++;

}

int outPos=0;

for(int i=0; i

for(int j=0; j

x[outPos++]=i;

}

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] A = {4,3,9,2,7,6,5};

System.out.println("Before partition:");

for(int i = 0; i < A.length; i++)

{

System.out.print(A[i] +"");

}

partition(A);

System.out.println("After partition:");

System.out.println("Before partition:");

for(int i = 0; i < A.length; i++)

{

System.out.print(A[i] +"");

}

}

}

这些行:

int[] bucket = int[],

bucket[x[i]]++;,以及

x[outpost++] = i;

给我带来麻烦。我收到错误

The type of expression must be an array type but is resolved to an int.

问题源于我试图创建一个名为bucket的新数组的第一行。我将不胜感激任何建议!谢谢!

会编译吗? int[] bucket = int [];

@ Kaushal28不!

哈哈@JacobG ....

也许只有一点(鉴于代码中有语法错误),但我不会选择partition作为存储桶排序中分发方法的名称。 zh.wikipedia.org/wiki/Bucket_sort

如果您构建一个最小的可重现示例并提出诸如"我如何创建数组"之类的问题,这将是一个更好的问题,尽管诸如此类的问题的答案可能在教科书或教程中可能会更好(因为您可能会漏掉它 学习语言基础所需的许多周围环境,这只会引发更多的问题)。

您可以使用的另一种方法是使用QuickSort的标准分区算法。

我已经修改了您的代码和以下代码

public class Problem4

{

/* This function takes last element as pivot,

places the pivot element at its correct

position in sorted array, and places all

smaller (smaller than pivot) to left of

pivot and all greater elements to right

of pivot */

public static int partition(int arr[], int low, int high)

{

int pivot = arr[high];

int i = (low-1); // index of smaller element

for (int j=low; j

{

// If current element is smaller than or

// equal to pivot

if (arr[j] <= pivot)

{

i++;

// swap arr[i] and arr[j]

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

// swap arr[i+1] and arr[high] (or pivot)

int temp = arr[i+1];

arr[i+1] = arr[high];

arr[high] = temp;

return i+1;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] A = {4,3,9,2,7,6,5};

System.out.println("Before partition:");

for(int i = 0; i < A.length; i++)

{

System.out.print(A[i] +"");

}

// swap and call the standard partition algo of QuickSort

// on last element pivot. swap arr[low] and arr[high]

int low = 0;

int high = A.length-1;

int temp = A[low];

A[low] = A[high];

A[high] = temp;

partition(A, low, high);

System.out.println("

After partition:");

for(int i = 0; i < A.length; i++)

{

System.out.print(A[i] +"");

}

}

}

产出

Before partition:

4 3 9 2 7 6 5

After partition:

3 2 4 5 7 6 9

希望能帮助到你!

我认为您不需要诉诸于水桶排序。 相反,您可以简单地遍历数组,将小于拆分值的元素放在前面,将大于拆分值的元素放在后面。 我们可以使用两个变量front和back来跟踪数组前面和后面的插入位置。 从数组中的位置1开始,如果该值小于分割值,则将其放置在front处,并递增front和当前索引。 如果值更大,我们将其交换为back的值并递减back,但保留当前索引。

这是一些代码说明:

public static void main(String[] args)

{

int[] A = {4,3,9,2,7,6,5};

sort(A);

System.out.println(Arrays.toString(A));

}

public static void sort(int[] arr)

{

int split = arr[0];

int front = 0;

int back = arr.length-1;

for(int i=1; front != back; )

{

if(arr[i] <= split)

{

arr[front] = arr[i];

front += 1;

i++;

}

else

{

swap(arr, i, back);

back -= 1;

}

}

arr[front] = split;

}

public static void swap(int[] arr, int i, int j)

{

int t = arr[i];

arr[i] = arr[j];

arr[j] = t;

}

输出:

[3, 2, 4, 7, 6, 5, 9]

谢谢! 这要简单得多! 我说运行时间为O(n)是否正确?

是的,您只需遍历数组的n个元素,分配或交换2个元素。

水桶平分 java_关于java:桶排序算法代码问题相关推荐

  1. java七大排序算法代码

    1.冒泡排序(bubbleSort) import java.util.*; public class BubbleSort{public static void swap(int[] a,int i ...

  2. java代码实现希尔排序_Java希尔排序算法代码实现

    Java希尔排序算法代码实现 时间:2017-08-30     来源:华清远见JAVA学院 什么是Java希尔排序算法呢? 希尔排序算法实际上是一种分组插入的排序算法,又被称为缩小增量排序.今天华清 ...

  3. 桶排序算法(基于Java实现)

    title: 桶排序算法(基于Java实现) tags: 桶排序算法 桶排序算法的原理和代码实现 一.桶排序算法的原理 桶排序,顾名思义,会用到"桶",核心思想是将要排序的数据分到 ...

  4. Java经典排序算法

    提示:本文仅供自己学习 Java经典排序算法 一.排序算法概念及分类 1.排序概念 2.排序分类 二.十大排序算法 1.冒泡排序(BubbleSort) 2.选择排序(Selection sort) ...

  5. php桶排序,PHP实现桶排序算法

    本篇讲解PHP实现桶排序算法. 简单意义上的桶排序: 桶排序的原理是先安排N+1个桶作为容器,若数据范围为N的话. 然后将测试数据(所需排序的数据)进行循环,放入对应的桶内.数据一定是在范围N内的. ...

  6. Java常见排序算法

    Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html

  7. Java常见排序算法之插入排序

    一.概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分.所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏, ...

  8. java treemap 排序原理,Java TreeMap排序算法实例

    本文实例讲述了Java TreeMap排序算法.分享给大家供大家参考,具体如下: TreeMap 和 HashMap 用法大致相同,但实际需求中,我们需要把一些数据进行排序: 以前在项目中,从数据库查 ...

  9. 桶排序算法——C++

    桶排序算法是"分治法"的典型应用,主要思路是先"分桶"(或建捅)再"合桶".其中最关键的是"分桶",这一步最佳的时将整个 ...

最新文章

  1. Oracle分析函数五——统计分析函数
  2. 数组最大最小值比较次数优化
  3. 第十九讲 拉普拉斯变换引入
  4. 【C++】40. std::array与int a[]方式创建数组的区别
  5. android中注册的账号密码储存在,Android中使用SharedPreferences完成记住账号密码的功能...
  6. NodeJS作为Web架构中间层的使用
  7. el-option传两个值_俗话说买房看地段,买窗看K值:如何区分K值、U值和R值
  8. volatile c语言_C语言系列文章之volatile
  9. html包含字体文件路径,系统字体文件夹路径
  10. 产品经理的常见分类和术语
  11. xp计算机无法远程桌面连接,xp系统远程桌面不能连接指定计算机的处理方法
  12. 小波奇异点检测C语言,matlab小波变换对奇异点的检测
  13. 利用python和Sen2cor对Sentinel2进行批量大气校正
  14. C语言【程序19】题目:两个乒乓球队进行比赛,各出三人。
  15. 记录使用scrapy爬取新闻网站最新新闻存入MySQL数据库,每天定时爬取自动更新
  16. 一键新机IGRIMACE手机在线源安装方式
  17. 7大创业误区:听听过来人的故事
  18. roadflow企业微信工作流程的配置与使用
  19. 网络 -- TCP流量控制、拥塞控制
  20. 分享112个ASP信息管理源码,总有一款适合您

热门文章

  1. Python gmpy2 mpz Methods
  2. sql sever 2008 使用SSMS实现自动备份,每周一次,完整备份
  3. JavaScript 框架之战结束:React 是最终赢家?
  4. final 关键字的 8 个小细节
  5. AWS中国区同时上线两款新产品,补齐存储服务“全家桶”!
  6. 低代码已至,传统开发方式是否还有必要?
  7. 软件欺诈的骗局揭露:“替罪羊”究竟是如何构建的?
  8. 入选 CVPR 2020的旷视论文,到底写了啥?
  9. 沈向洋离开微软,曾是华人在美科技圈最高级高管,畅谈职业生涯的 7 堂课!...
  10. 程序员因为一件衣服收获了爱情,真甜!