2014-09-29 189 views
1

这是文本文件:排序阵列

1,2,8,4,5,6,7,7, 

3,4,5,6,7,8, 

5,6,7,8,9,9, 

1,2,3,4,5,8,9,0 

忽略了第一列后:

2,8,4,5,6,7,7, 

4,5,6,7,8, 

6,7,8,9,9, 

2,3,4,5,8,9,0 

我想降序排序的数组,但我不能让它开始工作。这是我迄今所做的代码:

Scanner scanner = new Scanner(new File("test.txt")); 

int row = 0; 
int col = 0; 

while (scanner.hasNextLine()) 
{ 
    String currentline = scanner.nextLine(); 

    row++; 

    String[] items = currentline.split(","); 
    int[] intitems = new int[items.length]; 

    for (int i = 1; i < items.length; i++) 
    { 
     intitems[i] = Integer.parseInt(items[i]); 

     System.out.print(intitems[i] + " "); 

     int temp = 0; 
     for (int j = 2; j < (items.length - i); j++) 
     { 
      temp = intitems[j - 1]; 
      intitems[j - 1] = intitems[j]; 
      intitems[j] = temp; 
     } 
     col = i; 
    } 

    col++; 
    System.out.println(); 
    System.out.println("After sort: " + intitems); 

    System.out.println(); 
} 

System.out.println("Row: " +row); 
+0

我的坏,我不小心标记的JavaScript。 Sry – Jen 2014-09-29 09:18:39

+0

排序算法的种类是否重要? – 2014-09-29 09:26:26

+0

只要它很容易理解就没关系。 – Jen 2014-09-29 09:32:11

回答

1
private static void sortInDescending(int[] arrayObj) 
    {   
     int n = arrayObj.length; 
     int temp = 0; 

     for(int i=0; i < n; i++) 
     { 
      for(int j=1; j < (n-i); j++) 
      {         
       if(arrayObj[j-1] < arrayObj[j]) 
       { 
        temp = arrayObj[j-1]; 
        arrayObj[j-1] = arrayObj[j]; 
        arrayObj[j] = temp; 
       }       
      } 
     } 
    } 

调用方法

sortInDescending(arrayinput); 
4

无需复杂的事情:

for (int i = 1; i < items.length; i++) { 
    intitems[i - 1] = Integer.parseInt(items[i]); 
} 

Arrays.sort(intitems); // Ascending 
Arrays.sort(intitems, Collections.reverseOrder()); // Descending 

但是,如果你真的想用一个循环排序的阵列(冒泡),你需要比较的品种切换:

for (int i = 0; i < intitems.length - 1; i++) { 
    for(int j = i + 1; j < intitems.length; j++) { 
    if (intitems[i] > intitems[j]) { 
     int temp = intitems[j]; 
     intitems[j] = intitems[i]; 
     intitems[i] = temp; 
    } 
    } 
} 

如果你想让它按降序排列,然后只需改变greater than (>)相比于lesser than (<)比较排序:

if (intitems[i] < intitems[j]) { 
+0

这完全没有帮助,他显然想要掌握排序算法,而不是使用任何哑语可以使用的内置函数。 – Dici 2014-09-29 09:24:52

+0

请提及您正在使用的排序算法:P – TheLostMind 2014-09-29 09:31:31

+0

在这种编码中,我使用了冒泡排序算法,但是我无法让它正常工作。 – Jen 2014-09-29 09:33:37

1

您可以使用带有自定义比较器的Arrays.sort()使其降序。

String[] items = currentLine.split(","); 
    Integer[] intItems = new Integer[items.length]; 

    for(int i=0; i<intItems.length; ++i) { 
     intItems[i] = Integer.parseInt(items[i]); 
    } 

    Comparator<Integer> comparator = new Comparator<Integer>() { 
     @Override 
     public int compare(Integer left, Integer right) { 
      return -Integer.compare(left, right); 
     } 
    }; 

    Arrays.sort(intItems, comparator); 

    System.out.println(Arrays.toString(intItems)); 
} 

或者您可以按升序对数组进行排序并使数组反向。

Arrays.sort(intItems); 

    Integer[] descending = new Integer[intItems.length]; 

    int length = descending.length; 
    for(int i=0; i<length; ++i) { 
     descending[i] = intItems[length - 1 - i]; 
    } 

    System.out.println(Arrays.toString(descending)); 
1

其他答案包含冒泡排序算法,其中一个元件相比,其后继者。如果排序条件匹配,则它们被交换。稍微快一点的解决方案是插入排序:本质上,它会找到数组的最大(最小)值并将其放在前面。有实现可能是这样的:

static int[] array = {2,8,4,5,6,7,7,}; 


public static void insertionSort(final int[] array) {  

    for(int i = 0; i < array.length; i++){ 
     int maxValueIndex = findMaxValue(array, i); 

     int temp = array[i]; 
     array[i] = array[maxValueIndex]; 
     array[maxValueIndex]=temp; 
    } 
} 

private static int findMaxValue(final int[] array, int index) { 

    int value = Integer.MIN_VALUE; 

    for (int i = index; i < array.length; i++) { 

     if (array[i] > value) { 
      value = array[i]; 
      index = i; 
     } 
    } 
    return index; 
} 

public static void main(final String[] args){ 
    insertionSort(array); 
    System.out.println(Arrays.toString(array)); 
} 
1

你去那里:

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

public class SortTXT { 

static File fout; 

public static void main(String[] args) { 

    fout = new File("text.txt"); 
    if (!fout.isFile()) 
    { 
     System.out.println("text.txt - Parameter is not an existing file"); 
    } 
    else 
    { 
     BufferedReader br = null; 
     try { 
      br = new BufferedReader(new InputStreamReader(new FileInputStream(fout))); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

     String line = null; 
     try { 
      while ((line = br.readLine()) != null) { 
       if (line.length()>2) 
       { 
        line.trim(); 
        // crete an array from the line - seperate by "," 
        List<String> list = new ArrayList<String>(Arrays.asList(line.split(","))); 
        // remove the 1st number 
        list.remove(0); 
        //sorting the list 
        Collections.sort(list); 
        System.out.println(); 
        System.out.println("After sort: "); 

        // print out the sorted array 
        for(String temp: list){ 
         System.out.print("," + temp); 
       } 
      } 
      } 
     } catch (IOException e) { 
     } 

     try { 
      br.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

}

希望这有助于:)

戴夫。