1

このプログラムでは、ArrayList words. これまでのところ、 を使用してCollections.sort、テキスト ファイル内のすべての行をアルファベット順に配置しました。ただし、このプログラムに二分探索アルゴリズムを実装したいのです、データのソート (マージ ソート、バブル ソートなど) なしでは実現できないと思います。私は間違っているかもしれませんが、それが私がガイダンスと知識のためにここに来た理由です.

次に、ソート用のメソッドを作成すると、これは a wordsis a Stringnot anString[]です。そのようなデータ型を使用してバブルソートを行うにはどうすればよいですか?

public static void main(String[]args) throws IOException{
    Scanner scan = new Scanner(System.in);
    String stringSearch = scan.nextLine();

    ArrayList<String> words = new ArrayList<String>();
    BufferedReader reader = new BufferedReader(new FileReader("File1.txt"));

    String line;

    while ((line = reader.readLine()) != null) {                
        words.add(line);
    }reader.close();

    Collections.sort(words);
    for(String str:words)
        System.out.println(str); 

    for(String sLine : words) 
    {
        if (sLine.contains(stringSearch)) 
        {
            int index = words.indexOf(sLine);
            System.out.println("Got a match at line " + index);

        }
     }

    System.out.println(words.size());
}
4

2 に答える 2

2

まず、Collections.sort(Collection) を使用してリストを並べ替えることができます。

次に、ArrayList 実装の List.get(int) を使用して、O(1) インデックス アクセスを実現できます。

3 番目の Object.compareTo(Object) は、バイナリ検索ループをガイドする役割を果たします。

何か誤解していたらごめんなさい!

于 2013-01-09T04:49:41.290 に答える
0

バブル ソートは単純なソート アルゴリズムであり、ソート対象のリストを繰り返し処理し、隣接するアイテムの各ペアを比較し、順序が間違っている場合は交換します。リストがソートされたことを示すスワップが不要になるまで、リストのパススルーが繰り返されます。小さい値はリストの一番上にバブルアップし、大きい値は一番下に沈むため、バブルソートと呼ばれる理由を知っていますか。

私の技術ブログから完全なソース コードを見つけてください - http://www.algonuts.info/java---how-to-create-a-bubble-sort.html

package info.algonuts;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

class BubbleSortCompute {
    static List <Integer> intList = new ArrayList <Integer>();

    public static void add(List <Integer> temp) {
        intList.clear();
        Iterator<Integer> ptr  = temp.iterator();
        while(ptr.hasNext()) {
            intList.add(ptr.next());
        }
    }

    public static void sort() {
        System.out.println("Before Bubble Sort:");
        Iterator<Integer> ptr  = intList.iterator();
        while(ptr.hasNext()) {
            System.out.print(ptr.next()+" ");
        }
        System.out.println("\n\nAfter Bubble Sort:");
        compute();
        ptr  = intList.iterator();
        while(ptr.hasNext()) {
            System.out.print(ptr.next()+" ");
        }
    }

    private static void compute() {
        int temp;
        int intListSize = intList.size();
        for(int outerCounter = 0;outerCounter < intListSize; outerCounter++) {
            for(int interCounter = 0;interCounter < intListSize - outerCounter - 1; interCounter++) {
                if(intList.get(interCounter) >= intList.get(interCounter+1)) {
                    temp  = intList.get(interCounter+1);
                    intList.set(interCounter+1, intList.get(interCounter));
                    intList.set(interCounter, temp);
                }
            }
        }   
    }
}

public class BubbleSort {
    //Entry Point
    public static void main(String[] args) {
        List <Integer> intList = new ArrayList <Integer>(Arrays.asList(50,2,5,78,90,20,4,6,98,1));
        BubbleSortCompute.add(intList);
        BubbleSortCompute.sort();
    }
}
于 2019-05-06T07:50:33.300 に答える