Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我不确定我的分区函数出了什么问题

我不确定我的分区函数出了什么问题
EN

Stack Overflow用户
提问于 2013-04-25 01:31:28
回答 1查看 179关注 0票数 0

Eclipse一直告诉我我的分区函数有问题。它是用java编写的,是一个关于数组排序的类的一部分。

分区是这样工作的:数组中有两个索引i和j,在分区算法的最开始,i指向数组中的第一个元素,j指向最后一个元素。然后,算法向前移动i,直到找到值大于或等于枢轴的元素。索引j向后移动,直到找到值小于或等于透视的元素。如果i≤j,那么它们被交换,并且i步到下一个位置(i + 1),j步到前一个位置(j - 1)。当i大于j时,算法停止。

你能看到问题出在哪里吗,因为我很难找到它。如果您能帮上忙,我们将不胜感激。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static int partition(int arr[], int left, int right)
    {
        int x = arr[right];

        int i = left-1;
        int temp=0;

        for (int j=left; j<right; j++)
        {
            if(arr[j]<=x)
            {
                i++;
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;

            }
        }

        temp = arr[i+1];
        arr[i+1] = arr[right];
        arr[right] = temp;
        return (i+1);

    }

编辑

Eclipse说有两个问题,一个是分区函数中的这行代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int x = arr[right];

使用我的测试类中的这一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sort.partition(array, 100, array.length);

下面是测试类,其中包含我没有提到的函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.Random;


public class test {

    /**
     * @param args
     */
    public static void main(String[] args) {

        int size = 1000;
        int max = 5000; 
        int[] array = new int[size];
        int loop = 0; 

        Random generator = new Random();
        //Write a loop that generates 1000 integers and 
        //store them in the array using generator.nextInt(max)

        generator.nextInt(max); //generating one

        //I need to generate 1000
        //So I need some kind of loop that will generate 1000 numbers. 

        for (int i =0; i<1000; i++)
        {
            generator.nextInt(max);
        }



        /**
         * After I do this, I'll have the array, array. 
         * Then comes what's under this. 
         * THat method is for measuring the time.
         * System.currentTimeMillis();, 
         * with this, I can collect a time for the start of the method
         * and one for the end. 
         * Time at the end, minus the time at the start
         * gets us the running time. 
         */



        long result;

        long startTime = System.currentTimeMillis();
        sort.quickSort(array,  100,  array.length-1);
        long endTime = System.currentTimeMillis();
        result = endTime-startTime; 

        System.out.println("The quick sort runtime is " + result + " miliseconds");

        long result2;

        long startTime2 = System.currentTimeMillis(); 
        sort.partition(array, 100, array.length);
        long endTime2 = System.currentTimeMillis();
        result2 =  endTime2 - startTime2;
        System.out.println("The partition runtime is "+result2 + " miliseconds");

        long result3;

        long startTime3 = System.currentTimeMillis();
        sort.bubbleSort(array, 100);
        long endTime3 = System.currentTimeMillis();
        result3 = endTime3-startTime3;
        System.out.println("The bubble sort runtime is "+result3 + " miliseconds");

        long result4;

        long startTime4 = System.currentTimeMillis();
        sort.selectionSort(array, 100); //change the second number to change
        //the size of an array. 
        long endTime4 = System.currentTimeMillis();
        result4 = endTime4-startTime4;
        System.out.println("The selection sort runtime is "+result4 + " miliseconds");



    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-25 02:31:06

首先,您实际上并没有在数组中存储随机数,所以它将是全零的。

至于你看到的实际错误,你已经得到了一个错误的经典错误。您有两个选择:让right指向数组的末尾,或者指向数组的末尾。其中任何一个都是有效的,但是您将这两个混合在一起。

具体地说,您为right值传递了1000 (超过数组末尾一次),但随后您立即用它对数组进行索引,自然地抛出了异常。

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

https://stackoverflow.com/questions/16204979

复制
相关文章
【今日问题】变量未初始化引起的崩溃
昨天写的今日问题,有小伙伴给我反馈,觉得挺有用,小编今天继续给小伙伴们总结遇到的常见问题 一、初学者经常由于没有养成良好的编程习惯,未初始化变量会引起那些问题 使用未初始化的变量是常见的程序错误,通常也是难以发现的错误。虽然许多编译器都至少会提醒不要使用未初始化变量,但是编译器并未被要求去检测未初始化变量的使用。而且,没有一个编译器能检测出所有未初始化变量的使用。 现象列举: 1、引起程序运行时突然崩溃   这种结果已近是相当好了,至少你可以发现程序崩溃的位置,及时的修正问题 2、程序运行成功但是结果错
程序员互动联盟
2018/03/13
2.2K0
无符号整型和有符号整型的区别,以及无符号整型的使用
size_t 等价于unsigned int 接收sizeof的返回值要用%u
大忽悠爱学习
2021/03/04
4.4K0
无符号数和有符号数
人有十个手指头,习惯了逢十进一,于是十进制成了生活中的标准。程序的世界只有高低电平两种状态,更适合用二进制来表示,于是二进制成了程序世界的标准。 对与无符号数来说,我们更喜欢谈他们之间的转化,十进制是我们最习惯的进制,于是十进制转为R进制,R进制转为十进制变尤为重要。
naget
2019/07/03
3.1K0
无符号数和有符号数
PWN 无符号和有符号整型的绕过漏洞
C语言中,无符号整型数是不带正负表示符号的整型数。C语言在计算机里编译时数都是用二进制表示的,如果最左边这一位不用来表示正负,而是和后面的连在一起表示整数,那么就不能区分这个数是正还是负,就只能是正数,这就是无符号整型数。
yulate
2023/05/02
9660
PWN 无符号和有符号整型的绕过漏洞
对未初始化的的chan进行读写,会怎么样?为什么?
关于 chan 的面试题非常多,这个是比较常见的其中一个。但多问一句:为什么对未初始化的 chan 就会阻塞呢?
9号同学
2021/03/03
6440
对未初始化的的chan进行读写,会怎么样?为什么?
C++ 中有符号类型到无符号类型的转换
为了更好地解释下面的代码,先来介绍一些背景知识,在我的计算机中, char 类型占 8 个比特位,那么, unsigned char 类型能表示的数的范围为 0 ~ 2的8次方 - 1,即 0 ~ 255,共 256 个数;int 类型占 32 个比特位,那么 unsigned 类型所能表示的数的范围为 0 ~ 2的32次方 - 1,即 0 ~ 4294967295,共 4294967296 个数,接下来看下面的代码:
用户7886150
2021/02/15
1.4K0
mold源码阅读九 未解析符号的处理
本期内容主要是claim_unresolved_symbols的部分,其次是其他一些简单的处理
AkemiHomura
2023/10/22
2080
FPGA设计中 有符号数、无符号数
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
FPGA技术江湖
2020/12/29
1.7K0
FPGA设计中 有符号数、无符号数
mysql无符号整型溢出
下午用sql的时候突然想到这个问题,徒手测试了一下,结果还真令人意外: 首先创建一张测试用表 mysql> CREATE TABLE `t1` ( -> `id` int UNSIGNED NOT NULL AUTO_INCREMENT , -> `val` int UNSIGNED NOT NULL DEFAULT 0 , -> PRIMARY KEY (`id`) -> ); Query OK, 0 rows affected (0.04 sec) 初始化一条数据: mysql> insert in
码农二狗
2018/06/29
2K0
loadrunner 脚本开发-int型变量和字符串的相互转换
Action2.c(5): Notify: Saving Parameter "param = 12345".
授客
2019/09/10
6650
移位运算(无符号移位运算,有符号移位运算)
可以移位运算的类型有:iuint,int,lang等类型.我们本次使用int类型 一个int类型占4个字节,共32位,带符号位,所以最高位位符号位(使用0,1表示符号位)
全栈程序员站长
2022/09/14
1.4K0
数制转换itoa atoi int转字符串 字符串转int string转int int转string
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 1.itoa():将整型值转换为字符串。 用法itoa(int,char*,int) 即(要转化的整形数,目标字符数组,进制) 2. ltoa():将长整型值转换为字符串。 用法ltoa(long,char*,int) 即(要转化的长整形数,目标字符数组,进制) ● gcvt():将浮点型数转换为字符串,取四舍五入。 用法gcvt(double,int,char*) 即(要转化的双精度浮点数,保留位数,目标字符串) ● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。 用法charecvt(double,int,int,int*) charecvt(双精度浮点数,保留位数,小数点位置,转换浮点数的符号) 这个函数存储最多ndigit个数字值作为一个字符串,并添加一个空数字符(’\0’),如果双精度浮点数中的数字个数超过保留位数,低位数字被舍入。如果少于保留位数个数字,该字符串用0填充浮点数符号0为正其余为负数。 ● fcvt():指定位数为转换精度,其余同ecvt()。 用法charfcvt(double,int,int*,int*) charfcvt(双精度浮点数,保留小数点后位数,小数点位置,转换浮点数的符号) 2. C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。 ● atof():将字符串转换为双精度浮点型值。 double atof=char(const char) ● atoi():将字符串转换为整型值。用法同上。 ● atol():将字符串转换为长整型值。用法同上。 ● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。double strtod(char * str,char * str) double strtod(转换的来源字符串首地址,不能转换数字的首地址) ● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。 strtol(char * str,char * str,int) double strtol(转换的来源字符串首地址,不能转换数字的首地址,基于进制) ● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。用法同上。
风骨散人Chiam
2020/10/28
4K0
C/C++ int数组初始化
即后面4个元素调用了string的默认构造函数进行的初始化,而第一个则调用的string::string(const char*)进行的初始化。
全栈程序员站长
2022/09/09
1K0
对反事实后果有信念的理论AI模型
主动推理提供了感知行为的第一原理描述,从中可以导出特殊和重要的案例,例如强化学习、主动学习、贝叶斯最优推理、贝叶斯最优设计等。主动推理通过将信息获得置于与奖励或价值相同的基础上,解决了与先前偏好相关的开发-探索困境。简而言之,主动推理以预期(变分)自由能的形式,用(贝叶斯)信念的泛函代替了价值函数。在本文中,我们考虑一种复杂的主动推理,使用预期自由能的递归形式。复杂性描述了一个代理对信念的信任程度。我们考虑对事态的行动的反事实后果有信念的代理人和对那些潜在状态有信念的代理人。换句话说,我们从简单地考虑“如果我做了那件事会发生什么”转变为“如果我做了那件事,我会相信发生什么”。自由能泛函的递归形式有效地实现了对未来行动和结果的深树搜索。至关重要的是,这种搜索是基于信念状态的序列,而不是状态本身。我们用深层决策问题的数值模拟来说明这种方案的能力。
CreateAMind
2023/09/01
2700
对反事实后果有信念的理论AI模型
基础野:细说无符号整数
Brief                                 本来只打算理解JS中0.1 + 0.2 == 0.30000000000000004的原因,但发现自己对计算机的数字表示和运算十分陌生,于是只好恶补一下。   本篇我们一起来探讨一下基础的基础——无符号整数的表示方式和加减乘除运算。 Encode                                 无符号整数只能表示大于或等于零的整数值。其二进制编码方式十分直观,仅包含真值域。   我们以8bit的存储空间为例,真值域则
^_^肥仔John
2018/01/18
1.3K0
整数的存储:无符号表示法
整数在计算机里是以什么样的形式存储的呢?我们已经知道,计算机的数据是以位模式的形式存储的。也就是说,计算机存储的是二进制的内容。整数在计算机中有很多种存储方法,主要有下面三种:无符号表示法、符号加绝对值表示法和二进制补码表示法。这篇文章主要讨论无符号表示法。 无符号表示法仅仅是整数存储方法中的一种,接下来还会介绍符号加绝对值表示法和二进制补码表示法,敬请期待。
mwangblog
2018/07/04
1.1K0
基础野:细说无符号整数[通俗易懂]
本来只打算理解JS中0.1 + 0.2 == 0.30000000000000004的原因,但发现自己对计算机的数字表示和运算十分陌生,于是只好恶补一下。
全栈程序员站长
2022/09/20
1.4K0
C语言中,全局变量滥用的后果竟如此严重?
说起全局变量,就不得不提到“全局变量,局部变量,静态全局变量,静态局部变量”,这些都是编程语言中的基本概念。变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
C语言与CPP编程
2020/12/02
1.5K0
C语言中,全局变量滥用的后果竟如此严重?
3,变量与标点符号
与C等许多编程语言相比,作为动态语言的Python,其变量是一个标签,而不是一个容器。
lyhue1991
2020/07/20
9170
3,变量与标点符号
如何检测无符号整数乘法溢出
我在写一个程序计算 a ^ b = c 其中 a、b、c 都是无符号整数。为了检测乘法溢出,我写了下面的检测程序,
ClearSeve
2022/02/10
1.3K0

相似问题

int对无符号int对size_t

21

签名int未转换为无符号int

11

memcpy无符号int到无符号字符分割故障

212

将无符号int初始化为0?

21

符号int模无符号int生成无符号的结果。

312
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文