- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在输入尾部有重复值的情况下,我的插入排序有一个奇怪的问题。我遇到的最基本的情况是数组 {A,A,A}。由于我正在跟踪初始索引,因此我能够判断出排序不正确,因此存储了不正确的索引,从而导致值丢失。下面是插入排序的实现:
List A = new List();
String[] inputArray = {"A","A","A","A"};
String key;
int i, j;
//begin insertion sort
for (j = 1; j < inputArray.length; j++) {
i = j - 1;
key = inputArray[j];
while (i >= 0) {
if (key.compareTo(inputArray[i]) > 0) {
break;
}
inputArray[i+1] = inputArray[i];
A.moveTo(i+1);
//make sure we aren't trying to insert before first node
if (i > 0) { A.insertBefore(i); }
else { A.prepend(i); }
//remove node at cursor
A.delete();
i--;
System.out.println("inner: "+ A);
}
inputArray[i+1] = key;
A.moveTo(i+1);
if (i >= 0) { A.insertBefore(j); System.out.println("insert: " + A);}
else { A.prepend(j); System.out.println("prepend: " + A);}
System.out.println("current cursor:" + A.getIndex());
A.delete();
System.out.println("outer: " + A);
}
使用这里的 println,我得到以下输出:
inner: 0 0 2 3
prepend: 1 0 0 2 3
current cursor:1
outer: 1 0 2 3 //works fine the first time
inner: 1 0 1 3
inner: 0 1 1 3
prepend: 2 0 1 1 3
current cursor:1
outer: 2 1 1 3 //deletes the wrong value? Why?
inner: 2 1 1 2
inner: 2 1 1 2
inner: 0 2 1 2
prepend: 3 0 2 1 2
current cursor:1
outer: 3 2 1 2
这是 List 类的相关部分:
class List {
private class Node {
//Fields
int data;
Node next, previous;
//Constructor
Node(int data) {
this.data = data;
next = null;
previous = null;
}
public String toString() {
return String.valueOf(data);
}
}
//Fields
private Node frontNode, backNode, cursorNode;
private int totalSize, cursorPosition;
//Constructor
List() {
frontNode = backNode = cursorNode = null;
totalSize = 0;
cursorPosition = -1;
}
//length(): Returns number of elements in this list
int length() {
return totalSize;
}
//getIndex: Returns the index of the cursor element in this list, or
//returns -1 if the cursor element is undefined.
int getIndex() {
return cursorPosition;
}
//prepend(int data): Inserts new element before front element in this List.
void prepend(int data) {
Node node = new Node(data);
if (this.length() == 0) {
frontNode = backNode = node;
} else {
frontNode.previous = node;
node.next = frontNode;
frontNode = node;
}
totalSize++;
if (cursorPosition != -1) {
cursorPosition++;
}
}
//insertBefore(int data): Inserts new element before cursor element in this
// List. Pre: length()>0, getIndex()>=0
void insertBefore(int data) {
Node node = new Node(data);
if (this.length() > 0 && this.getIndex() >= 0) {
node.previous = cursorNode.previous;
node.next = cursorNode;
cursorNode.previous.next = node;
cursorNode.previous = node;
totalSize++;
cursorPosition++;
} else if (this.length() <= 0) {
throw new RuntimeException("Error: insertBefore called on empty list");
} else {
throw new RuntimeException("Error: insertBefore called without cursor set");
}
}
最佳答案
在 while
循环中不需要修改列表。
for (j = 1; j < inputArray.length; j++) {
i = j - 1;
key = inputArray[j];
while (i >= 0) {
if (key.compareTo(inputArray[i]) >= 0) {
break;
}
inputArray[i+1] = inputArray[i];
i--;
}
inputArray[i+1] = key;
A.moveTo(i+1);
A.insertBefore(j); // insert 'key' in right place
A.moveTo(j+1);
A.delete(); // remove old occurrence of 'key'
}
我用 >=
替换了 >
以使循环在键大于 或等于 当前元素时立即停止。这样, key 将插入到相等值之后而不是之前。
我建议您扩展 insertBefore
以在 cursorPosition == 0
时在开头插入。这是一个逻辑扩展,消除了插入排序算法中的特殊情况。
关于java - 重复值插入排序,双向链表ADT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17460135/
Google发布的ADT bundle 包的最终版本是什么? 由于宣布“Android Studio”为开发Android应用程序的正式IDE,因此ADT bundle 包(带有ADT插件和Andro
我在 Eclipse Indigo (3.7.2) 中更新我的 android ADT 插件时遇到了一个可怕的错误。请检查所附图片。 谢谢 最佳答案 遇到了类似的问题。这就是我修复它的方式。 1.从
我正在使用 ADT 包 22.3。这是我直接从 android.com 下载的完整离线压缩包。但现在他们已经将更新推送到 ADT bundle 22.6,所以在下载 ADT bundle 22.6 z
我用 C 语言创建了一个基于结构的抽象数据类型。在这个结构中,有指向同样基于结构的其他 ADT 的指针。我想知道如何/是否可以正确初始化内部指针并消除内存访问冲突错误。代码如下: typedef st
我想创建一棵树(使用 Node 或 ADT),其中每个节点都有一个指向其父节点的注释。下面是一个简单的链表数据结构的例子: import util::Math; import IO; import N
在 eclipse 上 - 尽管我使用的是最新的 adt 版本,但我还是收到了这个错误。我不确定它是否相关,但这发生在我安装 android-m sdk 之后。 最佳答案 从这里开始: https:/
我的应用程序运行良好。但是,一旦我从 ADT 16 更新到 ADT 17,就会收到此错误 Unable to resolve superclass of Lcom/my/app/MyActivity;
大家早上好 我是 SO 的新手,我问这个问题是因为我必须重新调整昨天的算法和编程考试。在 CodeBlocks 上输入我的考试时,我遇到了一个我无法修复的错误。基本上,考试要求从数据结构中的文件(格式
几乎没有人在 ADT 中成功导入 Apklib(aar) 引用。这是一个 issues ,但没有答案。在问题中,这是一个 solution有效但丑陋。 作为 ADT 的粉丝,我不想使用 Android
我遇到了从 安装 ADT 的问题 https://dl-ssl.google.com/android/eclipse/ 和 http://dl-ssl.google.com/android/eclip
在使用 Eclipse 开发时,尝试安装 hibernate、storm 和其他一些 ORM/DAO 生成器工具时,eclipse 停止正常工作。 我有两种错误:1 在构建它时说“运行 android
这个问题在这里已经有了答案: Update Eclipse with Android development tools v. 23 (43 个回答) 关闭8年前。 我从这个网站下载并安装了带有 an
我在创建 dynArray 并向其添加元素时遇到了问题。我不确定如何为它分配内存。我最近才开始提出建议,因此非常感谢您的帮助。 typedef struct{ doube *darray; i
假设我有一个 ADT 和类型类 Foo像这样: sealed trait A case class A1() extends A case class A2() extends A case clas
我正在使用 scala 驱动程序与 mongodb 进行 IO 操作。我的Scala版本是2.11.11 mongo db 驱动程序是 2.2.0 . 我以关于 ADT 的文档为例: sealed c
我正在尝试用 C++ 实现二叉搜索树(用于大学类(class)),但在访问我在 .h 文件中定义的结构时遇到了一些困难。 这是我的 .h 文件: class BST { protected:
我有两个空中应用程序并将它们安装在桌面上并执行它们,并且任务栏管理器中列出了两个空中进程。现在如何从另一个空中应用程序执行一个空中应用程序的某些方法? 最佳答案 使用LocalConnection .
我不是数学家,但我觉得存在一些逻辑问题。 让我们从 ADT 原语开始,例如“unit”类型。它应该在类型集的上下文中扮演“1”的角色。但事实上,我们看到“unit”类型在C、C++等中经常被称为“vo
在 C 中创建 ADT 时返回结构体指针的原因是什么?例如: typedef struct some_thing st_t; // system interface st_t* init_syste
更新到 ADT 22.3 后,出现此错误: [2013-11-09 17:56:27 - Dex Loader] Unable to execute dex: java.nio.BufferOverf
我是一名优秀的程序员,十分优秀!