Как мне внедрить счетчик шагов в пузырьковую сортировку? - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь внедрить счетчик шагов в мой алгоритм сортировки пузырьков, но я не знаю, как отобразить счетчик в конце алгоритма сортировки. Если бы кто-нибудь мог объяснить, как я должен go об этом, это было бы здорово. Спасибо.

Мой текущий код: (Bubble Sort):

static int[] bubbleSort(int[] arr, int n)
{
    int stepCount = 0; // <- Counter to return and display

    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - 1 - i; j++)
        {
            if (arr[j + 1] < arr[j])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
            stepCount++;
        }
    }

    return arr;
}

public static void DisplayArrayBubble(int[] arr)
{
    foreach (int i in arr)
    {
        Console.Write(i.ToString() + "  ");
    }
}

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

Почему бы просто не вернуть int - количество шагов? Т.е.

// arr    : will be sorted
// return : number of steps
static int bubbleSort(int[] arr) {
  if (null == arr)
    return 0;

  int stepCount = 0;

  for (int i = 0; i < arr.Length - 1; i++)
    for (int j = 0; j < arr.Length - 1 - i; j++) 
      if (arr[j + 1] < arr[j]) {
        int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;

        stepCount += 1;
      }

  return stepCount;
}

Демо :

   int[] sample = new int[] {1, 5, 4, 3, 2, 7};

   int steps = bubbleSort(sample);

   Console.WriteLine($"Sorted [{string.Join(", ", sample)}] in {steps} steps");

Результат:

   Sorted [1, 2, 3, 4, 5, 7] in 6 steps
0 голосов
/ 12 марта 2020

Существует множество способов, но один состоит в том, чтобы создать собственный класс для хранения обеих нужных вам частей информации:

    public class BubbleObject
    {
        public int[] arr { get; set; }
        public int stepCount { get; set; }
    }

Затем откорректируйте код, который вы должны использовать для этого объекта:

 static BubbleObject bubbleSort(int[] arr, int n)
    {
        int stepCount = 0;
        for (int i = 0; i < n - 1; i++)
        {
            for (int j = 0; j < n - 1 - i; j++)
            {
                if (arr[j + 1] < arr[j])
                {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
                stepCount++;
            }
        }

        BubbleObject bo = new BubbleObject() { arr=arr, stepCount=stepCount}

        return bo;
    }
    public static void DisplayArrayBubble(BubbleObject bo)
    {

        Console.WriteLine("Number of Steps = " + bo.stepCount);

        foreach (int i in bo.arr)
        {
            Console.Write(i.ToString() + "  ");
        }
    }

Это должно сделать это. Есть и другие способы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...