Java 循环优先级队列的插入/排序算法 //给出数组中的下一个索引,该索引环绕在一个环中;在索引中顺时针移动 私有int nextSlot(int k){ 返回((k+1)%A.长度); } //插入法 公共空白插入(int k){ 如果(大小=A.length) 调整大小(); A[下一个]=k; 对于(int i=0;i =i不是确定j是否达到i的正确方法 j--也是错误的,因为j-1需要包装 我试着为家庭作业做这个,这就是为什么我把它实现为一个循环数组。我明白你对第一个for循环所说的。当我将它修改为for(int I=0;I=I to j==I)并创建了一个previousSlot方法来包装j时,当我使用这些更改运行它时,不会再排序任何内容。 for(int i = 0; i < next; i = nextSlot(i)) { for( int j = next - 1; j >= i; j--)
我试图创建一个insert/sort方法,将值按升序插入到循环优先级队列中。我遇到的问题是,当下一个指针循环回到数组的开头时,队列前面的项没有被排序。我已经为此挣扎了好几个小时了,任何帮助都将不胜感激 具体地说,当下一个循环回到开始时,它将是0,因此这个for循环:Java 循环优先级队列的插入/排序算法 //给出数组中的下一个索引,该索引环绕在一个环中;在索引中顺时针移动 私有int nextSlot(int k){ 返回((k+1)%A.长度); } //插入法 公共空白插入(int k){ 如果(大小=A.length) 调整大小(); A[下一个]=k; 对于(int i=0;i =i不是确定j是否达到i的正确方法 j--也是错误的,因为j-1需要包装 我试着为家庭作业做这个,这就是为什么我把它实现为一个循环数组。我明白你对第一个for循环所说的。当我将它修改为for(int I=0;I=I to j==I)并创建了一个previousSlot方法来包装j时,当我使用这些更改运行它时,不会再排序任何内容。 for(int i = 0; i < next; i = nextSlot(i)) { for( int j = next - 1; j >= i; j--),java,algorithm,queue,priority-queue,circular-buffer,Java,Algorithm,Queue,Priority Queue,Circular Buffer,我试图创建一个insert/sort方法,将值按升序插入到循环优先级队列中。我遇到的问题是,当下一个指针循环回到数组的开头时,队列前面的项没有被排序。我已经为此挣扎了好几个小时了,任何帮助都将不胜感激 具体地说,当下一个循环回到开始时,它将是0,因此这个for循环: // gives next index in array which wraps around in a ring; moves clockwise through indices private int nextSlot(int
// gives next index in array which wraps around in a ring; moves clockwise through indices
private int nextSlot(int k) {
return ((k + 1) % A.length);
}
// Insert method
public void insert(int k) {
if( size == A.length)
resize();
A[next] = k;
for(int i = 0; i < next; i = nextSlot(i)) {
if(k < A[i]) {
for( int j = next - 1; j >= i; j--){
A[nextSlot(j)] = A[j];
}
A[i] = k;
break;
}
}
next = nextSlot(next);
size++;
}
错误至少有两个原因:
我试着为家庭作业做这个,这就是为什么我把它实现为一个循环数组。我明白你对第一个for循环所说的。当我将它修改为for(int I=0;I=I to j==I)并创建了一个previousSlot方法来包装j时,当我使用这些更改运行它时,不会再排序任何内容。
for(int i = 0; i < next; i = nextSlot(i)) {
for( int j = next - 1; j >= i; j--)