Ҳама унсурҳои манфиро бо мақсади ба итмом расонидани фазои иловагӣ ҳаракат кунед


Сатҳи душворӣ осон
Аксар вақт пурсида мешавад Пойтахт Яке аз Citrix IBM Лабораторияҳои SAP Такси4 Тиллио
тартиботи ҳарбӣ

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

"Ҳамаи унсурҳои манфиро бо мақсади ба итмом расонидани фазои иловагӣ иҷозат диҳед" нишон медиҳад, ки ба шумо массиви дорои рақамҳои мусбат ва манфӣ дода мешавад. Дар изҳороти масъала хоҳиш карда мешавад, ки ҳамаи унсурҳои манфии массиви охирин интиқол дода шаванд.

мисол

arr[] = { 1,2,-3,-5,2,7,-9,-11 }
1, 2, 2, 7, -3, -5, -9, -11
Шарҳ: Ҳама қиматҳои манфӣ ба массиви охирин гузаронида шуданд. Ва онҳо дар тартиби аввал низ ҳастанд.

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

1. Declare an array same as the size of the original array.
2. Traverse the array and check if any number is greater than or equal to 0,
    1. If true then copy that number from the 0th position of the array we created.
3. Now traverse the array and check if any of the numbers is less than 0.
    1. If true, then copy that value to the array we created from the next position where the positive number ends.
4. Now copy that temporary array we created into the original array and print that array.

Шарҳ

Ба мо як ҳамаҷониба массиви дорои рақамҳои манфӣ ва мусбӣ. Мо хоҳиш кардем, ки массивро тавре тағир диҳем, ки ҳамаи унсурҳои манфиро ба охир / охири массив интиқол диҳем. Он гоҳ мо массиви унсурҳои мусбат ва манфиро алоҳида тай хоҳем кард. Аввалан, мо бояд амалиётҳоро оид ба унсурҳои мусбӣ иҷро кунем, ки дар он ҷо онҳоро ба тарафи чап кашем. Ва он гоҳ ҳамаи унсурҳои манфиро ба тарафи рост гузаронед.

Мо бояд массиви иловагии ба андозаи массиви аслӣ эҷод кунем. Зеро дар ин ҳолат, мо тартиботи дилхоҳи рақамҳоро нигоҳ медорем. Гирифтани индекси тағирёбанда ва онро ҳамчун 0 оғоз кунед. Ин тағирёбанда ба мо кӯмак мекунад, ки унсурҳои мусбат ва манфиро фарқ кунем. Ҳоло мо массиви эҷод кардем. Мо рақамҳои мусбатро аз массиви аслӣ то массиви муваққатӣ мегузорем.

Мо ҳангоми гузариш санҷем, ки оё элементҳои массив аз 0 калон ё ба XNUMX баробаранд, пас танҳо он элементро ба массиви муваққатӣ аз мавқеи ибтидоии массиви муваққатӣ нусхабардорӣ кунед. Инчунин, мо арзиши индексро ҳамзамон афзоиш медиҳем, аз ин рӯ, азбаски мо унсури мусбатро бори охир нусхабардорӣ менамоем, мо индекси арзишро аз рӯи унсури навбатӣ дорем, ки дар он нигоҳдорӣ карда мешавад, бо ёрии ин, мо ҳамаи унсурҳои манфиро дар охир тела медиҳем.

Ҳоло мо бори дигар гашти массивро давом медиҳем ва месанҷем, ки оё ҳар як элемент аз 0 камтар аст, агар он сифр бошад, пас ин қиматро ба массиви муваққатӣ аз арзиши индексе, ки мо онро тарк кардем, оғоз мекунем. Дар ниҳоят, он массивро ба массиви аслӣ нусхабардорӣ кунед, пас чоп кунед ё танҳо чопи массиви муваққатӣ, ҳарду як чизанд. Ва мо натиҷаи заруриро ба даст меорем.

Ҳама унсурҳои манфиро бо мақсади ба итмом расонидани фазои иловагӣ ҳаракат кунед

рамз

Коди C ++ барои интиқол додани ҳамаи унсурҳои манфӣ бо мақсади бо фазои иловагӣ иҷозат додан

#include<bits/stdc++.h>
using namespace std;

void segregateElements(int arr[], int n)
{
    int temp[n];

    int j = 0;

    for (int i = 0; i < n ; i++)
        if (arr[i] >= 0 )
            temp[j++] = arr[i];

    if (j == n || j == 0)
        return;

    for (int i = 0 ; i < n ; i++)
        if (arr[i] < 0)
            temp[j++] = arr[i];

    memcpy(arr, temp, sizeof(temp));
}

void printArray(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}

int main()
{
    int arr[] = { 1,2,-3,-5,2,7,-9,-11 };
    int n = sizeof(arr)/sizeof(arr[0]);

    segregateElements(arr, n);
    printArray(arr,n);

    return 0;
}
1 2 2 7 -3 -5 -9 -11

Рамзи Java барои Ҳаракат додани ҳамаи унсурҳои манфӣ бо мақсади бо фазои иловагӣ иҷозат додан

import java.util.Arrays;

class moveNegativeElement
{
    public static void segregateElements(int arr[], int n)
    {
        int temp[] = new int[n];

        int j = 0;

        for (int i = 0; i < n; i++)
            if (arr[i] >= 0)
                temp[j++] = arr[i];

        if (j == n || j == 0)
            return;

        for (int i = 0; i < n; i++)
            if (arr[i] < 0)
                temp[j++] = arr[i];

        for (int i = 0; i < n; i++)
            arr[i] = temp[i];
    }
    public static void printArray(int arr[], int n)
    {
        for (int i = 0; i < n; i++)
            System.out.print(arr[i] + " ");
    }
    public static void main(String arg[])
    {
        int arr[] = { 1,2,-3,-5,2,7,-9,-11 };
        int n = arr.length;

        segregateElements(arr, n);
        printArray(arr,n);

    }
}
1 2 2 7 -3 -5 -9 -11

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

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

О (Н) ки дар "N" унсурҳои массив аст. Мо танҳо аз массива гузаштем, ки ба туфайли он мо ба мураккабии хаттии вақт ноил шудем.

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

О (Н) ки дар "N" унсурҳои массив аст. Мо массиви иловагӣ барои истифодаи муваққатӣ сохтем, ки дар он элементҳоро ба тариқи дилхоҳ нигоҳ медоштем.