Массивро мувофиқи тартиби муайянкардаи массиви дигар ҷобаҷо кунед  


Сатҳи душворӣ осон
Аксар вақт пурсида мешавад Amazon Microsoft Лабораторияҳои SAP Snapchat Yahoo Зохо
тартиботи ҳарбӣ Ҷустуҷӯ Sorting

Изҳороти мушкилот  

Ба шумо дуто медиҳанд массиви of ҳаждаҳҳо arr1 [] ва arr2 []. Масъалаи "Массивро мувофиқи тартиби муайянкардаи массиви дигар" ҷобаҷо кунед нависед массиви аввал мувофиқи массиви дуюм, то ин ки рақамҳои массиви аввал нисбат ба ҳамаи арзишҳои arr2 [] ҷудо карда шаванд. Ва унсурҳои массиви аввал, ки дар массиви дуюм нестанд, дар охири массив ба тариқи мураттаб ҷойгир карда мешаванд.

мисол  

arr1[] = { 2,1,2,5,1,3,6,8,8 }

arr2[] = { 2,1,8,3}
2 2 1 1 8 8 3 5 6

Шарҳ

A1 мувофиқи A2 ҷудо карда мешавад.

Массивро мувофиқи тартиби муайянкардаи массиви дигар ҷобаҷо кунедпайвандак

 

Алгоритми ҷобаҷогузории массив мувофиқи тартиби муайянкардаи массиви дигар  

1. Sort the array using the qsort method or comparator interface.
2. Search the value in arr2[] and find its index value.
3. Check if
  1. Both of the returned value is -1 if true then return the difference between the returned value.
  2. If one of the first returned values is -1 if true then return the -1.
  3. If the second returned value is -1, then return 1.
4. Else return the value of the difference of the input value.
5. Print the sorted array.

Шарҳ  

Мо ду чизро додем ҳамаҷониба массиви. Пас аз мо илтимос мекунанд нависед массиви аввал мувофиқи массиви дуюм. Яке аз массивҳо дорои тамоми арзишҳоест, ки бояд мураттаб карда шаванд. Ва массиви дигар дорои чанд арзишест, ки мо бояд массиви аввалро ҷобаҷо кунем. Ин маънои онро дорад, ки агар мо шумораи дар массиви дуюм додашударо ҳамчун (1, 2, 3, 4) дошта бошем. Ва мо бояд ҳамаи 1ҳоро дар массиви аввал ҷустуҷӯ кунем ва аввал онҳоро ба тариқи мураттаб дар массив аввал гузорем. Пас мо дар массиви дуюм 2 дорем. Ҳама 2-ро дар массиви аввал пайдо кунед ва баъд онҳоро ба массиви аввал гузоред ва ғайра.

ҳамчунин нигаред
Калимаро тахмин кунед

Мо барои дарёфти натиҷаи дилхоҳ усули сохташударо истифода хоҳем кард. Дар C ++, мо qsort усули, qsort усули пешакӣ муайяншуда, ки ҳамчун алгоритми квиксорт истифода мешавад. Ин яке аз босуръат алгоритмҳои ҷобаҷогузории ҳама гуна рӯйхат мебошад. Ва дар java, мо интерфейси Компарторро барои мувофиқ кардани массиви дуюм истифода хоҳем кард. Усул ду арзишро интихоб мекунад. Барои муқоиса, он гоҳ мо ин қиматро барои ҷустуҷӯ дар массиви дуюм мегузаронем. Агар он дар массиви дуюм мавҷуд бошад, он гоҳ индексро барои ҳарду қимати худ бармегардонад, он ҳозир нест, пас мо арзиши -1 -ро бармегардонем.

Мо баъзе шартҳо гузоштем. Агар мо ҳардуи баргаштаро ҳамчун мусбат дарёфт кунем. Пас мо фарқи арзишҳои баргаштаро бармегардонем. Агар танҳо арзиши аввал мусбат бошад, пас -1 баргардед. Дар акси ҳол, агар танҳо арзиши дуюм мусбат бошад, пас 1-ро баргардонед. Пас аз ҳама муқоиса, массив мураттаб карда мешавад. Дар охир массиви мураттабро чоп кунед.

рамз  

Рамзи C ++ барои ҷобаҷогузории массив мувофиқи тартиби муайянкардаи массиви дигар

#include <stdio.h>
#include<iostream>

using namespace std;

int Arr2[4];

int size = 4;

int searchElement(int key)
{
    int i;
    for (i = 0; i < size; i++)
        if (Arr2[i] == key)
            return i;
    return -1;
}

int compareValuesFromArray(const void* a, const void* b)
{
    int eleIndex1 = searchElement(*(int*)a);
    int eleIndex2 = searchElement(*(int*)b);
    if (eleIndex1 != -1 && eleIndex2 != -1)
        return eleIndex1 - eleIndex2;
    else if (eleIndex1 != -1)
        return -1;
    else if (eleIndex2 != -1)
        return 1;
    else
        return (*(int*)a - *(int*)b);
}

void sortAccAnotherArray(int A1[], int size1)
{
    qsort(A1, size1, sizeof(int), compareValuesFromArray);
}

int main()
{
    int Arr1[] = {1,4,2,4,6,4,7,2,2,3 };
    int Arr2[]= {1,2,3,4};
    int n = sizeof(Arr1) / sizeof(Arr1[0]);

    sortAccAnotherArray(Arr1, n);

    for (int i = 0; i <n; i++)
        printf("%d ", Arr1[i]);
    return 0;
}
1 2 2 2 3 4 4 4 6 7

Рамзи Java барои ҷобаҷогузории массив мувофиқи тартиби муайянкардаи массиви дигар

import java.util.*;
import java.util.Arrays;

class SortAnArray
{
    private static int Arr1[] = { 1,4,2,4,6,4,7,2,2,3};
    private static int Arr2[]= {1,2,3,4};

    private static int size = Arr2.length;

    public static int searchElement(int key)
    {
        int i;
        for (i = 0; i < size; i++)
            if (Arr2[i] == key)
                return i;
        return -1;
    }

    public static void sortAccAnotherArray(int A1[], int size1)
    {
        Integer[]sortedArr = Arrays.stream(A1).boxed().toArray(Integer[]::new);

        Arrays.sort(sortedArr, new Comparator<Integer>()
        {
            public int compare(Integer o1, Integer o2)
            {

                int a = o1.intValue();
                int b = o2.intValue();

                int eleIndex1 = searchElement(a);
                int eleIndex2 = searchElement(b);

                if (eleIndex1 != -1 && eleIndex2 != -1)
                    return eleIndex1 - eleIndex2;
                else if (eleIndex1 != -1)
                    return -1;
                else if (eleIndex2 != -1)
                    return 1;
                else
                    return (a - b);
            }
        });
        int[] finalArr = Arrays.stream(sortedArr).mapToInt(Integer::intValue).toArray();
        System.out.println(Arrays.toString(finalArr));
    }

    public static void main(String [] args)
    {

        int n = Arr1.length;

        sortAccAnotherArray(Arr1, n);
    }

}

[1, 2, 2, 2, 3, 4, 4, 4, 6, 7]

Таҳлили мураккабӣ  

Мураккабии вақт

O (mn Logm) ки дар "М" дарозии arr1 & аст "Н" дарозии arr2 аст. Азбаски мо qsort (алгоритми ҷобаҷогузорӣ) -ро истифода бурдаем. Мо ба он ноил шудем O (n log n) омил. Дар ин ҷо ҷустуҷӯ бо истифодаи ҷустуҷӯи хаттӣ анҷом дода мешавад. Ва ба ҷои ин, мо метавонистем ба осонӣ аз HashMap истифода барем, ки мураккабии вақтро боз ҳам коҳиш диҳад.

ҳамчунин нигаред
Top K унсурҳои зуд-зуд

Мураккабии фазо

O (log n), ки дар "М" ва "Н" дарозии Arr1 ва Arr2 мебошад. Азбаски мо бо истифодаи навъҳои зуд ҷобаҷогузорӣ кардаем, пас мураккабии фазо аз он сабаб аст. Аммо барнома дар маҷмӯъ мегирад O (N + M).