Tag: 排序

Java:排序文本文件行

我正在使用eclipse,我正在尝试对大约40行的文本文件进行排序,如下所示: 1,Terminator,1984,Schwarzenegger 2,Avatar,2009,Worthington 3,Avengers,2012,Downey 4,Starwars,1977,Hammill 5,Alien,1979,Weaver 我想通过第二个字段按字母顺序对它们进行排序,以便将文本文件更改为如下所示: 5,Alien,1979,Weaver 2,Avatar,2009,Worthington 3,Avengers,2012,Downey 4,Starwars,1977,Hammill 1,Terminator,1984,Schwarzenegger 我相当肯定我应该做一些涉及对它们进行标记的事情(我已经做过它来展示它)和一个BufferedWriter但我不能为我的生活想到一种方法来做到第二或第三场而且我觉得我错过了一些明显的东西。

用Java排序数组

用Java编写静态方法: public static void sortByFour (int[] arr) 它接收一个充满非负数(零或正数)的数组作为参数,并按以下方式对数组进行排序: 在数组的开头,将出现所有可被4整除的数字。 在它们之后,将出现数组中除以4且余数为1的所有数字。 在它们之后,将显示数组中除以4且余数为2的所有数字。 在数组的末尾,将出现所有剩余数字(除以4除以3的数字)。 (每组中数字的顺序无关紧要。) 该方法必须尽可能高效。 以下是我写的,但不幸的是它不能很好地工作…… 🙁 public static void swap( int[] arr, int left, int right ) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; } public static void sortByFour( int[] arr ) { int left = 0; int right = ( […]

Java中的并发排序

我目前正在开发一个程序来同时对字符串进行排序。 我的程序接收一个文件,将文件的每一行读入一个数组,并将字符串数组拆分成较小的字符串数组。 然后程序为每个较小的arrays启动一个线程,并快速排序。 一旦每个线程完成对其数组的排序,主线程就会收集线程对象的所有结果。 然后,它应该将较小的,现在已排序的数组合并为一个大的排序数组。 我知道我的快速排序实现有效 – 使用一个线程程序对单词进行排序。 我需要的是一种将线程返回的数组嵌套在一起的算法。 任何帮助表示赞赏 – 提前谢谢。

更高效的排序算法?

我正在寻找一种比Arrays.sort()更好的Arrays.sort() 。 我知道这看起来像是一个万次问的愚蠢的问题,但请继续阅读。 让我们有两个实现Comparable的类,它们的自然顺序基于int值。 第一个compareTo方法如下所示: public int compareTo(ComparableInteger o) { return this.value – o.value; } 第二个是: public int compareTo(ComparableInteger o) { if (this.value > o.value) { return 1; } else { if (this.value == o.value) { return 0; } else { return -1; } } } 当我在这些clases的实例列表上调用Collections.sort时,它们的表现大致相同。 我的问题是,是否存在排序算法,这将有益于第一个compareTo方法的附加信息。 在第一个示例中,添加的信息是: 我们有三个ComparableInteger值: a == 1 b == […]

插入排序,MergeSort和快速排序的测试用例

我已经实现了(在Java中)Insertion Sort,MergeSort,ModifiedMergeSort和Quick Sort: ModifiedMergeSort具有元素“绑定”的变量。 当要排序的元素小于或等于“bound”时,请使用Insertion Sort对它们进行排序。 为什么版本1比版本3,4和5更好? 版本2和6的结果是否真实? 这是我的结果(以毫秒为单位): Version 1 – Insertion Sort: Run-Times over 50 test runs Input Size Best-Case Worst-Case Average-Case N = 10000 14 19 14.96 N = 20000 59 60 59.3 N = 40000 234 277 243.1 Version 2 – Merge Sort: Run-Times over 50 test runs Input Size Best-Case […]

如何按其值类的字段对LinkedHashMap进行排序?

我使用以下行来对LinkedHashMap进行排序,但并非所有项都已排序,有什么不对吗? LinkedHashMap statisticsMap; // fill in the map … LinkedHashMap sortedStatisticsMap=new LinkedHashMap(); // Sort it by patternData’s average ArrayList statisticsMapValues=new ArrayList(statisticsMap.values()); Collections.sort(statisticsMapValues,Collections.reverseOrder()); // Sorting it (in reverse order) patternData last_i=null; for (PatternData i : statisticsMapValues) // Now, for each value { if (last_i==i) continue; // Without dublicates last_i=i; for (String s : statisticsMap.keySet()) // Get […]

如何对二维ArrayList进行排序

我有一个包含双值的二维ArrayList: ArrayList<ArrayList> data = new ArrayList<ArrayList>(); 与经典数组类似,我想对这个矩阵的“cols”进行排序:我想在子ArrayLists中获取具有相同索引的项,然后对它们进行排序。 就像为每一列调用Collections.sort()一样……按行我的意思是外层和内层是列。 这样做的正确方法是什么? 我想过迭代矩阵来反转它,然后用Collections.sort()对每一行进行排序? 但也许它不是最好的解决方案,因为矩阵大约是400 * 7000。 我不能使用经典数组,因为矩阵的大小是未知的。 感谢帮助。

从Java Array获得前四大值

我试图从整数数组输入中找到前4个最大值。 例如,对于给定的输入数组{1232,-1221,0,345,78,99}将返回{1232,345,99,78}作为前4个最大值。 我用下面的方法解决了这个问题。 但我仍然不满足于它的时间效率。 当输入变大时,是否有机会更多地优化方法? 任何线索都非常感谢。 谢谢。 public int[] findTopFourMax(int[] input) { int[] topFourList = { Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE }; for (int current : input) { if (current > topFourList[0]) { topFourList[3] = topFourList[2]; topFourList[2] = topFourList[1]; topFourList[1] = topFourList[0]; topFourList[0] = current; } else if (current > topFourList[1]) { topFourList[3] = topFourList[2]; topFourList[2] […]

基于列对2D整数数组进行排序

我有一个2D数组,我想根据第二列进行排序。 第一列应保持与第二列配对。 2Darrays最初如下(2×10矩阵): 0 10 1 9 2 9 3 9 4 15 5 10 6 4 7 8 8 11 9 12 我希望上面的2D数组像这样排序: 4 15 9 12 8 11 0 10 5 10 1 9 2 9 3 9 7 8 6 4 现在,我尝试调整答案: 将基于一列的二维数组排序到此代码中: Arrays.sort(theArray, new Comparator() { @Override public int compare(Integer[] int1, […]

并行化快速排序使其变慢

我正在快速搜索大量数据,为了获得乐趣,我尝试将其并行化以加快排序速度。 但是,在它的当前forms中,由于同步阻塞点,multithreading版本比单线程版本慢。 每次我生成一个线程时,我都会对一个int进行锁定并递增它,并且每次线程完成时我都会再次获得锁定和减少,此外还要检查是否还有任何线程仍在运行(int> 0)。 如果没有,我唤醒我的主线程并使用已排序的数据。 我相信有更好的方法可以做到这一点。 不知道它是什么。 非常感谢帮助。 编辑:我想我没有提供足够的信息。 这是octo-core Opteron上的Java代码。 我无法切换语言。 我正在排序的数量适合内存,并且在调用quicksort时它已经存在于内存中,因此没有理由将其写入磁盘只是将其读回内存。 通过“获取锁定”我的意思是在整数上有一个同步块。