Конвертирајте ја низата во зиг-заг мода


Ниво на тешкотија Лесно
Често прашувано во Accenture Амазон Фуркити Teradata Xome
Низа

Изјава за проблем

Проблемот „Конвертирај ја низата во зиг-заг мода“ наведува дека ти е даден - на цели броеви. Изјавата за проблемот бара да се сортира низата на цик-цак начин така што елементите во низата ќе изгледаат како  a <b> c <d> e <f.

пример

arr[] = {2,4,5,1,7,6,8}
[2, 5, 1, 7, 4, 8, 6]

Објаснување

5 е поголем и од 1 и од 2 (неговите соседни елементи), 7 е поголем од двата соседни елементи, исто така е и 8.

Алгоритам

1. Mark flag is equal to true.
2. Traverse the array from 0 to n-2, where n is the length of the array.
  1. Check if the flag is true
    1. Check if the current element is greater than the next element.
      1. Swap those values.
    2. Else, check if the current element is greater than the next element,
      1. Check if the current element is lesser than the next element.
        1. Swap those values.
3. Flip the value of the flag.

Објаснување

Дадовме една низа of цели броеви. Нашата задача е да ја преуредиме низата на цик-цак начин. Дадовме таков услов, парни елементи треба да бидат поголеми од неговите два соседни елементи, на начин на 'a <b> c <d> e <f '. Овде можеме да видиме дека b и d се поголеми од неговите два соседни елементи, 'a' и 'c' се помали од неговите два соседни елементи. Нашата задача е да ја уредиме дадената низа вака. За ова, ние ќе ги замениме вредностите, додека ја минуваме низата, таква што е наредена на цик-цак начин.

Е бидеме обележани како еден Булова вредност за вистинито, тогаш ќе започнеме да ја разгледуваме јамката и да провериме дали знамето е точно или не. Ако е точно, тогаш ќе провериме дали моменталната вредност е поголема од нејзината следна вредност. Тогаш ќе ги замениме тие вредности. И означете ги Буловите вредности на неточни. Треба само да ја вратиме нејзината вредност, ако е точна, а потоа да ја ажурираме на неточна, ако е лажна, да ја ажурираме на вистинска. Значи, со секое алтернативно поминување, за секоја повторување ќе има различни вредности на знамето. Значи, со ова, само еден дел ќе се изврши, или ако е дел или на друг дел.

Истото што ќе го сториме со другиот дел, да ги замениме вредностите. Ако моменталната вредност на низата во пресекот е помала од следната вредност. И по пресекот, ние само треба да ја испечатиме низата во кои направивме ажурирања.

Конвертирајте ја низата во зиг-заг мода

 

Код

C ++ код за конвертирање на низата во зиг-заг мода

#include <iostream>

using namespace std;

void sortZigZag(int arr[], int n)
{
    bool flag = true;

    for (int i=0; i<=n-2; i++)
    {
        if (flag)
        {
            if (arr[i] > arr[i+1])
                swap(arr[i], arr[i+1]);
        }
        else
        {
            if (arr[i] < arr[i+1])
                swap(arr[i], arr[i+1]);
        }
        flag = !flag;
    }
}
int main()
{
    int arr[] = {2,4,5,1,7,6,8};
    int n = sizeof(arr)/sizeof(arr[0]);
    sortZigZag(arr, n);
    for (int i=0; i<n; i++)
        cout << arr[i] << " ";
    return 0;
}
2 5 1 7 4 8 6

Java код за конвертирање на низата во зиг-заг мода

import java.util.Arrays;

class zigzagArray
{
    public static void sortZigZag(int arr[])
    {
        boolean flag = true;

        int temp =0;

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

            }
            else
            {
                if (arr[i] < arr[i+1])
                {
                    temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
            if(flag==true)
                flag=false;
            else
                flag=true;
        }
    }
    public static void main(String[] args)
    {
        int arr[] = {2,4,5,1,7,6,8};
        sortZigZag(arr);
        System.out.println(Arrays.toString(arr));
    }
}
[2, 5, 1, 7, 4, 8, 6]

Анализа на сложеност

Временска комплексност

Тој) каде „Н“ е бројот на елементи во низата. Бидејќи ние само ги преминавме елементите во низата. Временската сложеност е линеарна.

Комплексноста на просторот

О (1) бидејќи не е потребен дополнителен простор. Бидејќи не сме користеле дополнителен простор, комплексноста на просторот е постојана.