繁体   English   中英

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

[英]How do i do a bubble sort with a double linked list?

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

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

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部分,我也无法解决它的问题。 帮忙了吗?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM