i like food Ответов: 1

Преобразование алгоритма Python в C#. Проблема заключается в следующем


Это код C#. Моя проблема заключается в том, что он печатает семь 1 и 2, когда он должен печатать список vals по порядку. (что-то вроде).



using System;
using System.Collections.Generic;

namespace ConsoleApp5
{
    class Program
    {
        static void Main()
        {
            int[] vals = {6, 5, 3, 1, 8, 7, 2, 4};
            //List<int> vals = new List<int> { 6, 5, 3, 1, 8, 7, 2, 4 };
            int n = 8;
            

            for (int i = 0; i < n; i++)//<= or <?
            {
                
                for (int j = 0; j < n - 1; j += 1 )
                {
                    if (vals[j] > vals[j + 1])
                    {
                        vals[j] = vals[j + 1];
                        vals[j + 1] = vals[j];
                    }
                    
                }
            }

            foreach (int num in vals)
            {
                Console.WriteLine(vals[num]);
            }
            
            
            
            
        }
    }
}


а это и есть код python:

vals = [6,5,3,1,8,7,2,4]

n = len(vals)
for i in range(n):
     for j in range(0, n-1):
            if vals[j] > vals[j+1]:
                      vals[j], vals[j+1] = vals[j+1], vals[j]

print(vals)


Что я уже пробовал:

Я пытался изменить его из массива в список и наоборот, но ничего не изменил.
Я перепробовал много вещей с петлями, в настоящее время они работают так, как задумано.

Спасибо.

1 Ответов

Рейтинг:
11

Richard MacCutchan

if (vals[j] > vals[j + 1])
{
    vals[j] = vals[j + 1];
    vals[j + 1] = vals[j];
}

Вы не можете вот так обменяться двумя клетками. Вы установили vals[j] к значению vals[j + 1], а затем установить vals[j + 1] к значению vals[j], что уже является предыдущим значением vals[j + 1] Вам нужно скопировать первый элемент во временную переменную, например:
if (vals[j] > vals[j + 1])
{
    int temp = vals[j]; // save original value
    vals[j] = vals[j + 1];
    vals[j + 1] = temp; // original value in vals[j]
}