2012-05-27 38 views
0

我做我的功課,我需要使用快速排序排序字符串數組,在數組元素梳理數字和字符串。例如快速排序的字符串數組的元素結合數字和字符串

String s[]; 

s[0]="172,19,Nina"; 
s[1]="178,18,Apple"; 
s[2]="178,18,Alex"; 

所以排序之後,它應該是

s[0]=172,19,Nina 
s[1]=178,18,Alex 
s[2]=178,18,Apple 

即時通訊思想我應該拆分所有字符串首先進入數字和字符串,然後排序172178178,然後排序19 18 18,和最後排序Nina Apple Alex?

什麼是做到這一點的最好方法是什麼?

+2

什麼是「98,19,偉業」和「120,19,艾伯特的正確排序順序「在你的練習中? – Irfy

+0

沒有使用'的compareTo()'方法這裏的解決方案?向看到這個問題的人提出這個問題,而不是OP。 –

回答

0

是的,你是對的:你需要結合串基於這些分離元件陣列分成其元素和排序。請注意,您不需要排序基礎上,第一個數字,然後是第二等的全陣列,而是提供基於他們比較邏輯。這就是所謂的詞彙順序

基本上,當你需要決定一個元素是否小於另一個,你有以下邏輯(僞):

if elem1's first number < elem2's first number 
then 
    return elem1 less than elem2 
else if elem1's first number > elem2's first number 
then 
    return elem1 greater than elem2 
// from here on: elem1's first number == elem2's first number 
else if elem1's second number < elem2's second number 
then 
    return elem1 less then elem2 
else if elem1's second number > elem2's second number 
then 
    return elem1 greater than elem2 
// from here on: elem1's second number == elem2's second number 
else if elem1's third string < elem2's third string 
then 
    return elem1 less then elem2 
else if elem1's third string > elem2's third string 
then 
    return elem1 greater than elem2 
else // everything is the same 
    return elem1 equal elem2 
3

如果所有的數字具有相同的字符數,字典順序與數字順序相同,因此您可以直接比較字符串。

否則,你應該拆分字符串,並將其轉化成實現Comparable接口合適的對象:

public class Record implements Comparable<Record> { 
    private int firstNumber; 
    private int secondNumber; 
    private String name; 

    ... 

    @Override 
    public int compareTo(Record r) { 
     int result = Integer.valueOf(firstNumber).compareTo(Integer.valueOf(r.firstNumber); 
     if (result != 0) { 
      result = Integer.valueOf(secondNumber).compareTo(Integer.valueOf(r.secondNumber); 
     } 
     if (result != 0) { 
      result = name.compareTo(r.name); 
     } 
     return result; 
    } 
}