我怎么冒泡这个?

时间:2013-01-09 04:41:17

标签: java algorithm sorting bubble-sort array-algorithms

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

其次,当我创建一个排序方法时,wordsString而不是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());
}

2 个答案:

答案 0 :(得分:2)

首先,您可以使用Collections.sort(Collection)对列表进行排序。

第二,您可以使用ArrayList实现的List.get(int)来实现O(1)索引访问。

第三次,Object.compareTo(Object)将完成指导二进制搜索循环的工作。

对不起,如果我误解了什么!

答案 1 :(得分: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();
    }
}