CodeGym /Java Blog /சீரற்ற /ஜாவாவில் செருகும் வரிசைப்படுத்தல்
John Squirrels
நிலை 41
San Francisco

ஜாவாவில் செருகும் வரிசைப்படுத்தல்

சீரற்ற குழுவில் வெளியிடப்பட்டது
வரிசைகளை வரிசைப்படுத்துவது என்பது ஜாவா தொடக்கக்காரர்கள் எப்படி செய்வது என்று தெரிந்து கொள்ள வேண்டிய பொதுவான செயல்பாடுகளில் ஒன்றாகும். வரிசைகள் எப்போதும் தரவை ஒழுங்கமைக்க மிகவும் வசதியான வழி அல்ல, இது பெரும்பாலும் சிறிய எண்களுக்குப் பொருந்தும் என்றாலும், வரிசை வரிசைப்படுத்துதலுக்குப் பின்னால் உள்ள கருத்து சிக்கலான மென்பொருள் மற்றும் தரவு அறிவியலில் டன் பயன்பாடுகளைக் கொண்டுள்ளது. இந்த இடுகையில், செருகும் வரிசை என்ன என்பதை நாம் கூர்ந்து கவனிப்போம். இந்தக் கருத்தை முழுமையாகப் புரிந்துகொள்ள உங்களுக்கு உதவ சில எடுத்துக்காட்டுகள் மற்றும் நடைமுறைச் சிக்கல்களைச் சேர்த்துள்ளோம்.

செருகும் வரிசை என்றால் என்ன?

அடிப்படையில், செருகும் வரிசை என்பது சிறிய எண்களின் சரங்களை ஒழுங்கமைக்க டெவலப்பர்கள் பயன்படுத்தும் அல்காரிதம் ஆகும். இது அனைத்து மதிப்புகளையும் இரண்டு அடுக்குகளாகப் பிரிக்கிறது - வரிசைப்படுத்தப்பட்ட ஒன்று மற்றும் வரிசைப்படுத்தப்படாத ஒன்று. ஒவ்வொன்றாக, "வரிசைப்படுத்தப்படாத" அடுக்கில் உள்ள எண்கள் எடுக்கப்பட்டு சரியான வரிசையில் வைக்கப்படுகின்றன. ஜாவாவில் செருகும் வரிசை - 1செருகும் வகையின் உள்ளீடு மற்றும் வெளியீட்டை இன்னும் விரிவாகப் பார்ப்போம்:
  • உள்ளீடு: வரிசையாக்கப்படாத எண் கூறுகளைக் கொண்ட வரிசை A: A[0,1, n, n-2...].
  • வெளியீடு: ஒரே எண்களைக் கொண்ட ஆனால் முழுமையாக வரிசைப்படுத்தப்பட்ட வரிசை. இது பொதுவாக B: B[0]B[1]...B[n-1] என குறிப்பிடப்படுகிறது.
செருகும் வரிசையாக்கத்தைப் பயன்படுத்த சில வழிகள் உள்ளன - இங்கே மிகவும் பிரபலமானவை:
  • எண் வரிசையாக்கம் (அதிகரிக்கும் வரிசை): [1, 2, 3, 4, 5]
  • எண்ணியல் வரிசையாக்கம் (குறைக்கும் வரிசை): [5, 4, 3, 2, 1]
  • அகரவரிசைப்படி வரிசைப்படுத்துதல்: [a, b, c, d]
குறிப்பு: உங்களிடம் வெற்று வரிசை அல்லது சிங்கிள்டன் இருந்தால், இவை முன்னிருப்பாக வரிசைப்படுத்தப்படும்.

செருகும் வரிசையின் கோட்பாட்டைப் புரிந்துகொள்வது

செருகும் வரிசைக்கு பின்னால் உள்ள குறியீட்டை ஆராயும் முன், தொழில்நுட்பமற்ற மொழியைப் பயன்படுத்தி அல்காரிதத்தை உடைப்போம். ஏறுவரிசையில் வரிசைப்படுத்துவதற்கான குறியீட்டை நாங்கள் காண்பிப்பதால், இந்த இடுகையில் படிமுறை படிமுறையை விளக்குவது அர்த்தமுள்ளதாக இருக்கிறது. படி 1. 10 க்கும் குறைவான எண் மதிப்பு இருக்கும் இடங்களுக்கு arr[1]இடையில் மீண்டும் மீண்டும் செய்வது . படி 2. முறையைப் பயன்படுத்தி வரிசையில் உள்ள முந்தைய எண்ணுடன் நீங்கள் தேர்ந்தெடுத்த உறுப்பை (என அறியப்படுகிறது) ஒப்பிடவும் . படி 3. அனைத்து உறுப்புகளும் அவற்றின் வாரிசுகளை விட சிறியதாக இருந்தால், பெரிய மதிப்பைக் கண்டறியும் வரை ஒப்பீட்டை மீண்டும் செய்யவும். படி 4. வரிசைப்படுத்தப்பட்ட வரிசையை உருவாக்க, சிறியதைத் தாண்டி ஒரு பெரிய மதிப்பை ஒரு நிலையை மாற்றவும். arr[n]nkeysort()படி 5. வரிசைப்படுத்தப்பட்ட எழுத்துக்கள் கிடைக்கும் வரை செயல்முறையை மீண்டும் செய்யவும்

பழமையான அணிவரிசைகளை வரிசைப்படுத்துதல்

அல்காரிதம் மிகவும் நேரடியான ஜாவா செயல்பாடுகளில் ஒன்றாக இருப்பதால், முழுமையான ஆரம்பநிலையாளர்கள் கூட அதை செயல்படுத்துவதில் அதிக சிரமம் இருக்கக்கூடாது. வரிசையை வரிசைப்படுத்துவதற்கான படிப்படியான வழிகாட்டி இங்கே

1. வரிசைப்படுத்த ஒரு வரிசையை அறிவிக்கவும்

தொடங்குவதற்கு, ஜாவாவைப் பயன்படுத்தி பின்னர் காண்பிக்கும் மதிப்புகளின் சரத்தை உருவாக்குவோம். செருகும் வரிசையைப் பயன்படுத்த, நீங்கள் ஒரு வரிசையை உருவாக்க வேண்டும். அதற்கு, பயன்படுத்தவும்int[]

int[] arrayA = {10, 14, 20, 30};

2. அல்காரிதத்தை செயல்படுத்த sort_arr ஐப் பயன்படுத்தவும்

செருகும் வரிசையை செயல்படுத்துவதற்கான பொதுவான வழிகளில் sort_arr முறையும் ஒன்றாகும். நடைமுறையில், இது போல் தெரிகிறது:

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

3. ஒரு லூப் மற்றும் ஒரு இட்ரேட்டரை உருவாக்கவும்

செருகும் வரிசை அல்காரிதத்தில் லூப்பைப் பயன்படுத்துவதன் மூலம், டெவலப்பர்கள் ஒவ்வொரு உறுப்புக்கும் தர்க்கத்தை மீண்டும் செய்ய வேண்டியதில்லை. சுழல்களை உருவாக்குவது சிக்கலானதாகத் தோன்றினாலும், இது மிகவும் எளிமையானது - இங்கே ஒரு எடுத்துக்காட்டு:

for(int i=0; i< sort_arr.length; ++i){
இப்போது உங்களிடம் செயல்படும் லூப் உள்ளது, தேவையான வரிசையில் அனைத்து உறுப்புகளையும் வரிசைப்படுத்தும் ஒரு மறு செய்கையை உருவாக்க வேண்டிய நேரம் இது. இனிமேல், "" என்று திரும்பத் திரும்பக் குறிப்பிடுவோம் j.
        int j = i;

4. "while loop" ஐ உருவாக்குதல்

செருகும் வரிசைக்கு வரும்போது, ​​புதிய, வரிசைப்படுத்தப்பட்ட வரிசைக்கு "while" லூப் அவசியம். ஏறுவரிசை செருகும் வரிசைக்கு அதை அமைக்க, டெவலப்பர் இரண்டு நிபந்தனைகளுக்கு இணங்க வேண்டும்:
  • j க்கு ஒதுக்கப்பட்ட மதிப்பு 0 ஐ விட அதிகமாக இருக்க வேண்டும்
  • ஒதுக்கப்பட்ட மதிப்பு குறியீட்டை j-1விட அதிகமாக இருக்க வேண்டும்j
while லூப்பில் உள்ள இரண்டு நிபந்தனைகளும் சரி என்றவுடன், வரிசையின் முக்கிய மதிப்பு குறியீட்டிற்கு சமமாக இருக்கும் j.

5. வரிசையை வரிசைப்படுத்துதல்

நீங்கள் while லூப்பை அமைத்த பிறகு, while லூப்பில் உள்ள ஒன்று அல்லது இரண்டு நிபந்தனைகளும் தோல்வியடையும் வரை jமற்றும் j-1மதிப்புகள் மாற்றப்படும். இதேபோல், for-லூப் நிபந்தனைகளும் தோல்வியடையும் வரை for loop இல் உள்ள ஒவ்வொரு மதிப்புக்கும் வரிசையாக்கம் மீண்டும் மீண்டும் செய்யப்படும். நடைமுறையில் செருகும் வரிசைமுறை எவ்வாறு செயல்படுகிறது என்பது இங்கே:

int key = sort_arr[j];
          sort_arr[j] = sort_arr[j-1];
          sort_arr[j-1] = key;
          j = j-1;

வரிசைப்பட்டியலை வரிசைப்படுத்துதல்

செருகும் வரிசையின் பின்னால் உள்ள கணிதத்தைப் புரிந்துகொள்வது முக்கியம் என்றாலும், நிஜ வாழ்க்கை மென்பொருள் மேம்பாட்டிற்கு வரும்போது, ​​நீங்கள் பழமையான வரிசைகளில் உள்ள வரிசைகளை விட வரிசைப்பட்டியலை வரிசைப்படுத்துவீர்கள். வரிசைப்பட்டியலை வரிசைப்படுத்துவதற்கான படிப்படியான வழிகாட்டி இங்கே:
  1. Elementசேகரிப்பில் உள்ள பொருட்களுக்கு புதிய வகுப்பை உருவாக்கவும் .

    
    public class Element {
        private int id;
    
        public Element(int id) {
            this.id = id;
        }
    

  2. ஒரு சேகரிப்பில், ஒரு முறை உள்ளது compareTo()- இரண்டு உறுப்புகளின் ஐடிகளை ஒப்பிடுவதற்கு இதைப் பயன்படுத்துவோம்.

    
        public int compareTo(Element element) {
            int res = 0;
            if (this.id < element.getId()) {
                res = -1;
            }
            if (this.id > element.getId()) {
                res = 1;
            }
            return res;
        }
    }
    

  3. அல்காரிதத்தைப் பயன்படுத்துங்கள் மற்றும் பொருட்களை ArrayListஒப்பிடுவதற்குப் பதிலாக அவற்றை வரிசைப்படுத்த சில சுழல்களை உருவாக்கவும்.

    
    public static void insertionSortArrayList(List<element> list) {
        for (int j = 1; j < list.size(); j++) {
            Element current = list.get(j);
            int i = j-1;
            while ((i > -1) && ((list.get(i).compareTo(current)) == 1)) {
                list.set(i+1, list.get(i));
                i--;
            }
            list.set(i+1, current);
        }
    }
    

  4. ArrayListகீழே காட்டப்பட்டுள்ளபடி, நீங்கள் மேலும் கூறுகளைச் சேர்க்கலாம் :

    
    List<element> list = new ArrayList<>();
    
    // Create elements w/ IDs 0-24
    for (int i = 0; i < 25; i++) {
        list.add(new Element(i));
    }
    
    // To use insertion sort, shuffle the values
    Collections.shuffle(list);
    

  5. இப்போது வரிசைப்படுத்துவதற்கான நேரம் இது:

    
    // This helps print values before sorting
    list.forEach(e -> System.out.print(e.getId() + ", "));
    
    // Sort the list
    insertionSortArrayList(list);
    
    System.out.println();
    
    // Display a sorted array 
    list.forEach(e -> System.out.print(e.getId() + ", "));
    

  6. இப்போது நாம் எந்த தவறும் செய்யவில்லை என்பதை உறுதிப்படுத்த உள்ளீடு மற்றும் வெளியீட்டை ஒப்பிடுவோம். நாம் உதாரணமாகப் பயன்படுத்திய சரத்தின் ஒப்பீடு இங்கே உள்ளது.

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

செருகும் வரிசைப் பயிற்சி சிக்கல்கள்

இப்போது இந்த வரிசையாக்க அல்காரிதம் உங்களிடம் உள்ளது, உங்கள் தத்துவார்த்த மற்றும் நடைமுறை திறன்களை சோதனைக்கு உட்படுத்த வேண்டிய நேரம் இது. தியரி வினாடி வினா #1 உங்களுக்கு ஒரு வரிசை [1, 4, 6, 8] கொடுக்கப்பட்டு, அதில் n = 7 என்ற புதிய உறுப்பைச் சேர்க்கிறீர்கள். எண்களின் வரிசைப்படுத்தப்பட்ட வரிசையைப் பெற, நீங்கள் எத்தனை ஒப்பீடுகளைச் செய்ய வேண்டும்? வரிசையில் n இன் குறியீட்டின் இறுதி மதிப்பைக் குறிப்பிடவும். தியரி வினாடி வினா #2 ஒரு வேலை நேர்காணலில், வரிசைப்படுத்தல் ஒரு திறமையற்ற முறை என்பதை நிரூபிக்கும்படி ஒரு குழுத் தலைவர் உங்களிடம் கேட்கிறார். [0, 3, 6, 8, 9] என்ற எண் சரம் கொடுக்கப்பட்டால், வரிசைப்படுத்துவதற்குத் தேவைப்படும் இயங்கும் நேரத்தை அதிகரிக்க உங்கள் உள்ளீட்டு வரிசையின் வரிசை என்னவாக இருக்க வேண்டும்? நடைமுறைச் சிக்கல் ஜாவாவுக்கான செருகும் வரிசையைப் பயன்படுத்தி [0, 1, 4, 5, 2, 3, 7, 9, 8] வரிசையை அதன் ஏறுவரிசையில் வரிசைப்படுத்தவும்.

முடிவுரை

செருகும் வரிசையைப் புரிந்துகொள்வதில் மிகப்பெரிய சவால், செயல்முறை எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்துகொள்வதாகும். நீங்கள் அதைத் தொங்கவிட்டவுடன், டெம்ப்ளேட்டை குறியீடாக மாற்றுவது கேக் துண்டு. காலப்போக்கில் தொடர்புடைய நடைமுறை சிக்கல்களை நீங்கள் பயிற்சி செய்து மறுபரிசீலனை செய்யும் வரை, உங்கள் செருகும் வரிசை வேகத்தை விரைவாக மேம்படுத்துவீர்கள்.
கருத்துக்கள்
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION