1

在这个程序中,我只想对ArrayList words. 到目前为止,我使用了Collections.sort它,它已按字母顺序将所有行放在文本文件中。但是,我想为这个程序实现一个二进制搜索算法,但是,我认为如果不对数据进行排序(例如合并排序、冒泡排序)就不可能这样做。我可能错了,但这就是我来这里寻求指导和知识的原因。

其次,当我创建一个排序方法时,这是 a wordsis a Stringnot an String[]。然后如何使用这种数据类型进行冒泡排序?

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) 索引访问。

第三, 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 回答