0

我在一个双链表中有一堆数据,我需要对这个链表中的数字数据进行冒泡排序

这是我过去一直在使用的:

public void bubbleSort(int a[], int n)
{        
  for (int i = 0; i < n-1; i++) 
  {
    for (int j = 0; j < n-1-i; j++)
    {
      if (a[j + 1] < a[j]) 
      {
        int temp = a[j];
        a[j] = a[j + 1];
        a[j + 1] = temp;
      }          
    }
  }
}

但我不知道如何让它与链表一起使用,有什么帮助吗?

============================================

更新我尝试过的

所以我尝试了这个方法:

public StudentNode get(int i) {  
    if (!isEmpty()) {  
        int j = 0;  
        StudentNode element1 = header;  
        while (j++ < i) {  
            element1 = element1.getNext();  
            if (element1 == null)  
                return null;  
            }  
            return element1;  
        }  
        return null;  
    }  



public void bubbleSort()
{ 
    for (int i = 0; i < size - 1; i++) { 
        boolean changed = false;  
            for (int j = 0; j < size - i - 1; j++) {  
                if (get(j + 1) != null) {  
                    if (get(j).toBeSortedNumber() > get(j + 1).toBeSortedNumber()) {  
                        System.out.println("Swapping: " + get(j).toBeSortedNumber() + " : " + get(j + 1).toBeSortedNumber());  
                        swap(get(j), get(j + 1));  
                        changed = true;  
                    }  
                }  
            }  
            if (!changed)  
                return;  
        }  
} 

public void swap(StudentNode first, StudentNode second) {
    StudentNode firstPrev = first.goBack();
    StudentNode firstNext = first.getNext();
    StudentNode secondPrev = second.goBack();
    StudentNode secondNext = second.getNext();

        firstPrev.setNext(second);
        firstNext.setBack(second);
        secondPrev.setNext(first);
        secondNext.setBack(first);


    second.setBack(firstPrev);
    second.setNext(firstNext);
    first.setBack(secondPrev);
    first.setNext(secondNext);
}

但是它甚至没有进入该System.out.println部分,我无法弄清楚它有什么问题。还有帮助吗?

4

1 回答 1

1

由于这是家庭作业,我将把答案限制在一些提示上:

  1. 外循环可以保持原样。
  2. 内部循环用于比较(并且可能交换)连续元素对。
    • 您无法通过链表有效地使用随机访问。但是,有一个遍历列表一次并查看每个元素及其后继元素的循环非常容易。
    • 交换链表的两个连续节点可以非常简单,如果不是交换节点本身,而是交换存储在节点中的值。
于 2012-01-10T19:11:45.903 回答