簡體   English   中英

如何使用Java集合鏈表進行選擇排序算法?

[英]How to make a selection sort algorithm using Java collection linkedlist?

我是 Java 新手,我需要使用 Java LinkedList 進行選擇排序算法。 我嘗試進行插入排序,但無法將其轉換為選擇排序。 這是我的選擇排序代碼:

import java.util.*;
public class select {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        LinkedList<Integer> data = new LinkedList<>();

        System.out.println("Enter total count of elements-> ");
        int num = input.nextInt();

        while(num>0){
            data.add(input.nextInt());
            num--;
        }

        System.out.println("Original data:\n" +data);

        LinkedList<Integer> sortedData=sort(data);
        System.out.println("Sorted data:\n"+sortedData);
    }
    
    public static LinkedList<Integer> sort(LinkedList<Integer> data) {
        
        ListIterator<Integer> iterator=data.listIterator();
        while (iterator.hasNext()) {
            int key=iterator.next();
            

            for(int i = 0 ;i<data.size()-1;i++) {
                for(int j = i+1; j < data.size(); j++){
                    if(data.get(j) < key){
                        int x = data.get(j);
                        int y = key;
                        swap(data, x, y);
                    }
                }
                
            }
        }
        return data;
    }

    private static void swap(LinkedList<Integer> data, int x, int y) {
        int index1 = data.indexOf(x);
        int index2 = data.indexOf(y);

        if(index1 == -1 || index2== -2){
            return;
        }
    }
}

排序后的數據總是和原始數據一樣,不知道哪里出錯了。

問題似乎是您的swap方法實際上並未交換值。

正如您所期望的,這兩行將獲得您的數據的索引。

int index1 = data.indexOf(x);
int index2 = data.indexOf(y);

但這一切都是為了確保您的索引有效,這意味着找到了數據。 (雖然第二次檢查也應該是-1因為#indexOf方法總是返回索引,如果找到,或者 -1。永遠不會 -2。)

if (index1 == -1 || index2 == -1){ // changed to -1 on both
    return;
}

要實際進行交換,您需要在swap方法中其他代碼的末尾添加類似內容:

data.set(index1, y);
data.set(index2, x);

#set方法將第一個參數索引處的值更改為第二個參數中的值,因此執行兩次將有效地交換數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM