2012-12-08 25 views
5

Tôi đã được giao nhiệm vụ chuyển mã này thành một loại đảo ngược, nhưng đối với cuộc sống của tôi không thể tìm ra cách để làm điều đó. Đây là các phương pháp sắp xếp, tìm kiếm và hoán đổi của tôi. Tôi có cảm giác tôi đang thiếu một cái gì đó rõ ràng hiển nhiên ở đây, bất kỳ sự giúp đỡ nào cũng sẽ được đánh giá cao.Sắp xếp một chuỗi các chuỗi theo thứ tự bảng chữ cái ngược trong Java

public static void sort(String[] arr) 
    { 
     for (int pass = 1; pass < arr.length; pass++) 
     { 
      int largestPos = findLargest(arr, arr.length - pass); 
      if (largestPos != arr.length - pass) 
      { 
       swap(arr, largestPos, arr.length - pass); 
      } 
     } 
    } 

    public static int findLargest(String[] arr, int num) 
    { 
     int largestPos = 0; 
     for (int i = 1; i <= num; i++) 
     { 
      if (arr[i].compareToIgnoreCase(arr[largestPos]) > 0) 
      { 
       largestPos = i; 
      } 
     } 
     return largestPos; 
    } 

    public static void swap(String[] arr, int first, int second) 
    { 
     String temp = arr[first]; 
     arr[first] = arr[second]; 
     arr[second] = temp; 
    } 
} 
+2

Bạn có được phép sử dụng Bộ sưu tập và ArrayList không? –

+1

Chỉ một chú thích nhỏ: Các mảng trong Java bắt đầu bằng chỉ mục 0, không 1. – str

+0

@str OP không phải kiểm tra xem 'arr [0]> arr [0]'; bắt đầu kiểm tra tại chỉ số 1 là tốt. – irrelephant

Trả lời

1

bạn có thể sử dụng Arrays.sort(arr) để sắp xếp theo thứ tự bảng chữ cái.

và sau đó đảo ngược.

+4

(Điều ngược lại với nhiệm vụ.) –

+0

chỉnh sửa câu trả lời, anh ta sẽ phải đảo ngược mảng. – Subin

+1

Sử dụng hai đối số Arrays.sort và chuyển 'Collections.reverseOrder()' làm bộ so sánh. –

3

Bạn có thể chỉ cần bật findLargest để findSmallest, như thế này:

public static void sort(String[] arr) { 
    for (int pass = 1; pass < arr.length; pass++) { 
     int largestPos = findSmallest(arr, arr.length - pass); 
     if (largestPos != arr.length - pass) { 
      swap(arr, largestPos, arr.length - pass); 
     } 
    } 
} 

public static int findSmallest(String[] arr, int num) { 
    int largestPos = 0; 
    for (int i = 1; i <= num; i++) { 
     if (arr[i].compareToIgnoreCase(arr[largestPos]) < 0) { 
      largestPos = i; 
     } 
    } 
    return largestPos; 
} 

public static void swap(String[] arr, int first, int second) { 
    String temp = arr[first]; 
    arr[first] = arr[second]; 
    arr[second] = temp; 
} 
1
public static void sort(String[] arr) { 
    Arrays.sort(arr); 
    for (int i=0; i<arr.length/2; i++) { 
     swap(arr,i,arr.length-1-i); 
    } 
} 

Hãy thử này nếu bạn muốn. Trong phiên bản của bạn, bạn đang di chuyển lớn nhất về phía cuối của mảng, dẫn đến thứ tự chữ cái.

Chỉ trong trường hợp bạn nhấn mạnh vào cách tiếp cận ban đầu của bạn, tôi đã thực hiện một số thay đổi nhỏ để mã của bạn:

public static void sort(String[] arr) 
{ 
    for (int pass = 1; pass < arr.length; pass++) 
    { 
     int largestPos = findLargest(arr, pass-1); 
     if (largestPos != pass - 1) 
     { 
      swap(arr, largestPos, pass - 1); 
     } 
    } 
} 

public static int findLargest(String[] arr, int num) 
{ 
    int largestPos = num; 
    for (int i = num+1; i < arr.length; i++) 
    { 
     if (arr[i].compareToIgnoreCase(arr[largestPos]) > 0) 
     { 
      largestPos = i; 
     } 
    } 
    return largestPos; 
} 

Người tầm thường nhất tuy nhiên, theo đề nghị của Ian Roberts, chỉ đơn giản là Arrays.sort(arr, Collections.reverseOrder());.

1

Tôi nghĩ rằng đây là thứ bạn cần (nếu bạn không nghĩ về khung tuyển tập hợp).

public static void main(String args[]) { 


    String [] arr ={"abc","bac","cbc"}; 
      String temp=""; 

    for(int i=0;i<arr.length;i++){ 

     for(int j=i+1;j<arr.length;j++){ 

      if(arr[j].compareTo(arr[i]) > 0){ 

       temp = arr[i] ; 
       arr[i] = arr[j]; 
       arr[j] = temp; 
      } 
     } 

    } 

    for(String val:arr){ 
     System.out.println(val); 
    } 

} 

Output là

cbc 
bac 
abc 
5

Đừng phát minh lại bánh xe -

String[] strs = {"a", "b", "d", "c", "e"}; 

Arrays.sort(strs, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER)); 

System.out.println(Arrays.toString(strs)); 
 
[e, d, c, b, a] 
+1

Điều này có vẻ thanh lịch nhất, nhưng tôi lưu ý rằng mã muốn so sánh các chuỗi bỏ qua trường hợp. Vì vậy, thay vì Collections.reverseOrder() bạn cần một Comparator tùy chỉnh. – bowmore

+2

@bowmore bạn có thể sử dụng 'Collections.reverseOrder (String.CASE_INSENSITIVE_ORDER)' cho điều đó, không cần phải triển khai tùy chỉnh. –

+0

@IanRoberts Cảm ơn - đã cập nhật câu trả lời của tôi. – arshajii

3

Theo dõi từ ARS của câu trả lời:

Bạn có thể sử dụng một tùy chỉnh so sánh nếu bạn được phép sử dụng t ông Arrays.Sort phương pháp ...

Arrays.sort(stringArray, new Comparator<String>() { 
      @Override 
      public int compare(String t, String t1) { 
       return -t.compareToIgnoreCase(t1); //reverse the comparison, while ignoring case 
      } 
     }); 
1

Vì vậy, trước hết chúng ta cần phải tạo ra chuỗi mảng, sau đó sử dụng Arrays.sort(String[]);, sau đó sử dụng for để đảo ngược mảng sắp xếp để đảo ngược trật tự.

import java.util.Arrays; 

public class SortClass { 
    public static void main(String[] args) { 
     String[] arrayString = new String[5]; 
     arrayString[0] = "Cat"; 
     arrayString[1] = "Apple"; 
     arrayString[2] = "Dog"; 
     arrayString[3] = "Mouse"; 
     arrayString[4] = "kitchen"; 
     Arrays.sort(arrayString); 
     String[] arrReverse = new String[arrayString.length]; 
     for (int i = arrayString.length - 1; i >= 0; i--) { 
      arrReverse[arrayString.length - 1 - i] = arrayString[i]; 

     } 
    } 
} 
Các vấn đề liên quan