在这个程序中,我只是想对ArrayList
words
进行冒泡。到目前为止,我使用了Collections.sort
,它按字母顺序将所有行放在文本文件中。但是,我想对这个程序实现一个二进制搜索算法但是,我不认为没有排序数据就可以这样做(例如合并排序,冒泡排序)。我可能错了,但这就是我来到这里寻求指导的原因。知识。
其次,当我创建一个排序方法时,words
是String
而不是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());
}
答案 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();
}
}