Проходя через 2D матрицу Bubble-Sort C - PullRequest
0 голосов
/ 25 октября 2018

Итак, это сортировка 2D-матрицы, как змея.

snake matrix

Вот мой код, но есть несколько проблем.

Сортировка неиди как хотел.Он имеет бесконечные циклы почти в каждом размере матрицы.Я не понимаю почему.И что мне нужно - да, сортировка по пузырькам.Спасибо.

    // BUBBLE SORTING
    do
    {
        swapped = 0;
        for (j = 0; j < M; j++)
        {   
            if (k == 0)
            {
                for (i = 0; i < N; i++)
                {
                    for (i = 0; i < N - 1; i++)
                    {
                        if (a[i][j] > a[i + 1][j])
                        {
                            temp = a[i][j];
                            a[i][j] = a[i + 1][j];
                            a[i + 1][j] = temp;
                            swapped++;
                        }
                    }
                    if ((i = N - 1) && (a[i][j] > a[i][j + 1]))
                    {
                        temp = a[i][j];
                        a[i][j] = a[i][j + 1];
                        a[i][j + 1] = temp;
                        swapped++;
                    }
                }
                k++;
            }
            else if (k == 1)
            {
                for (i = N - 1; i >= 0; i--)
                {
                    for (i = N - 1; i > 0; i--)
                    {
                        if (a[i][j] > a[i - 1][j])
                        {
                            temp = a[i][j];
                            a[i][j] = a[i - 1][j];
                            a[i - 1][j] = temp;
                            swapped++;
                        }
                    }
                    if ((i = 0) && (a[i][j] > a[i][j + 1]))
                    {
                        temp = a[i][j];
                        a[i][j] = a[i][j + 1];
                        a[i][j + 1] = temp;
                        swapped++;
                    }
                }       
                k--;
            }
        }
    }
    while (swapped != 0);

1 Ответ

0 голосов
/ 26 октября 2018

Подход: скопируйте элементы из 2D-массива в 1D-массив и затем скопируйте его обратно в 2D-массив после выполнения сортировки Bubble для 1D-массива.

#include <stdio.h>

int main()
{

    //Here I have taken a matrix with 3 rows and 4 columns.

    int matrix[3][4] = {{2,5,-9,4},
                      {7,10,8,1},
                      {-7,100,5,20}};

  //step-1 copy the 2D array into a 1D array

  int mat[3*4],i,j,k=0;

  for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            mat[k] = matrix[i][j];
            k++;
        }

    }       

  //step-2 perform the bubble sort 

  for(i=0;i<3*4-1;i++)   //3*4<---no of elements 
  {
      for(j=0;j<3*4-1-i;j++)
      {
          if(mat[j] > mat[j+1])
          {
              int temp = mat[j];
              mat[j]=mat[j+1];
              mat[j+1] = temp;        
          }

      }

  }

  //step-3 place it back to the 2D array

  int toggle = 1;

  k=0;

  for(j=0;j<4;j++)
    {
        if(toggle==1)
          {    
            for(i=0;i<3;i++)
            {
              matrix[i][j] = mat[k];
              k++;
            }

            toggle = 0;
          }
        else
          {
             for(i=3-1;i>=0;i--)
            {
                matrix[i][j] = mat[k]; 
                k++;   
            }

            toggle = 1;

          }


    }

  //step-4 print the 2D matrix

  for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            printf("%d ",matrix[i][j]);

        }
        printf("\n");
    }



    return 0;
}

Вывод:

         -9   5   5   100
         -7   4   7    20
          1   2   8    10
...