2011-09-14 35 views
23

संभव डुप्लिकेट:
Sort arrays of primitive types in descending order
Java : How to sort an array of floats in reverse order?
How do I reverse an int array in Java?छंटाई पूर्णांक सरणी

निम्नलिखित कोड आरोही सरणी सॉर्ट जाएगा आदेश:

int a[] = {30,7,9,20}; 
Arrays.sort(a); 
System.out.println(Arrays.toString(a)); 

मुझे इसे अवरोही क्रम में क्रमबद्ध करने की आवश्यकता है। ऐसा करने के लिए मैं तुलनात्मक का उपयोग कैसे करूं?

कृपया मदद करें।

+4

यह होमवर्क है? –

+2

............... नहीं – android

+0

मैंने अभी एक कस्टम तुलनित्र के साथ आदिम सरणी को सॉर्ट करने के लिए एक लाइब्रेरी बनाई है [https://github.com/mintern-java/primitive#java- आदिम)। पहला "नमूना उपयोग" अवरोही क्रम में 'int [] 'को सॉर्ट कर रहा है। –

उत्तर

17

आदिम सरणी प्रकार के लिए, आप एक रिवर्स तरह एल्गोरिथ्म लिखने के लिए होगा:

वैकल्पिक रूप से, आप करने के लिए अपने int[] परिवर्तित कर सकते हैं Integer[] और एक तुलनित्र लिखें:

public class IntegerComparator implements Comparator<Integer> { 

    @Override 
    public int compare(Integer o1, Integer o2) { 
     return o2.compareTo(o1); 
    } 
} 

या Collections.reverseOrder() का उपयोग, क्योंकि यह केवल गैर आदिम सरणी प्रकार पर काम करता है।

और अंत में,

Integer[] a2 = convertPrimitiveArrayToBoxableTypeArray(a1); 
Arrays.sort(a2, new IntegerComparator()); // OR 
// Arrays.sort(a2, Collections.reverseOrder()); 

//Unbox the array to primitive type 
a1 = convertBoxableTypeArrayToPrimitiveTypeArray(a2); 
+0

कनवर्ट करने में त्रुटिप्रिमेटअरेरे टोबबॉक्स योग्य टाइप टाइप (ए 1) – android

+0

@android, वह विधि ** कभी ** मौजूद नहीं है, यह एक उदाहरण है जिसे मैंने 'int [] 'से' integer [] 'में रूपांतरण करने के लिए बनाया है। –

+0

यदि मैं int से Integer में परिवर्तित करता हूं, तो मैं Collections.reverseOrder का उपयोग कर सकता हूं लेकिन मुझे फिर से int में कनवर्ट करना होगा। क्या यह कुशल है? मुझे लगता है कि Aarrays.sort() के बाद सरणी को उलटना बेहतर है, तो दो रूपांतरण – android

5

Guava एक List<Integer> एक int[] सरणी द्वारा समर्थित बनाने के लिए विधि Ints.asList() है। आप अंतर्निहित सरणी में तुलनाकर्ता लागू करने के लिए Collections.sort के साथ इसका उपयोग कर सकते हैं।

List<Integer> integersList = Ints.asList(arr); 
Collections.sort(integersList, Collections.reverseOrder()); 

ध्यान दें कि उत्तरार्द्ध वास्तविक सरणी द्वारा समर्थित एक लाइव सूची है, इसलिए यह बहुत ही कुशल होना चाहिए।

+0

हां.मैं उसे जानता हूँ। असल में मैं जानना चाहता हूं कि तुलनात्मक का उपयोग करने का कोई तरीका है। – android

+0

@android, कोई तुलनाकर्ता वस्तुओं पर काम नहीं करता है, प्राइमेटिव नहीं। –

+0

@Android मेरी अद्यतन ArrayUtils –

4

यदि यह एक बड़ा/लंबे सरणी नहीं है बस इसे दर्पण:

for(int i = 0; i < arr.length/2; ++i) 
{ 
    temp = arr[i]; 
    arr[i] = arr[arr.length - i - 1]; 
    arr[arr.length - i - 1] = temp; 
} 
+2

हां.मैं के लिए धन्यवाद पता that.Actually मैं जानना चाहता हूँ वहाँ का उपयोग करने के लिए एक रास्ता है तुलनात्मक, – android

+0

प्राइमेटिव्स पर नहीं। तुलनात्मक को कार्यान्वित किया जाना चाहिए क्योंकि यह एक इंटरफ़ेस है। –

+0

सहायता – android

5
Comparator<Integer> comparator = new Comparator<Integer>() { 

     @Override 
     public int compare(Integer o1, Integer o2) { 
      return o2.compareTo(o1); 
     } 
    }; 

    // option 1 
    Integer[] array = new Integer[] { 1, 24, 4, 4, 345 }; 
    Arrays.sort(array, comparator); 

    // option 2 
    int[] array2 = new int[] { 1, 24, 4, 4, 345 }; 
    List<Integer>list = Ints.asList(array2); 
    Collections.sort(list, comparator); 
    array2 = Ints.toArray(list); 
+0

सहायता के लिए धन्यवाद – android

संबंधित मुद्दे