如何使用双链表进行冒泡排序?

时间:2012-01-10 17:33:13

标签: java linked-list bubble-sort

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

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

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);
}

butit甚至没有进入System.out.println部分,我无法解决它的错误。还有帮助吗?

1 个答案:

答案 0 :(得分:1)

由于这是家庭作业,我将限制我的回答一些提示:

  1. 外环可以保持原样。
  2. 内部循环用于比较(并可能交换)连续元素对。
    • 您无法有效地使用链接列表进行随机访问。但是,拥有一个循环遍历列表并查看每个元素及其后继的循环非常容易。
    • 交换链接列表的两个连续节点可以非常简单,如果不交换节点本身,则交换存储在节点中的