현재 정렬 프로그램을 작성 중입니다. 배열을 만드는 데 세 가지 다른 방법, 즉 Random
, In Order
및 Reverse
을 만들었습니다. 현재 In Order
및 Reverse
어레이에 문제가 있습니다. In Order
어레이가 생성 될 때마다 1
으로 시작합니다. 어떻게 그렇게되는지 확신 할 수 없습니다. 또한 내 Reverse
배열은 순서가 아닌 모든 클릭을 순서대로 표시합니다. 이 두 가지 문제를 어떻게 해결할 수 있습니까?다른 배열 만들기 : 올바른 결과가 표시되지 않습니다.
namespace sortingMachine
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Class Level Variables --------------------------------------------------------------------------------------
Stopwatch sw = new Stopwatch();
Random r = new Random();
OpenFileDialog open1 = new OpenFileDialog();
long operations = 0;
int size;
int max;
int[] createArray;
int[] sortArray;
int[] copyArray;
//Create Array Methods --------------------------------------------------------------------------------------
public void RandomNumber()
{
size = Convert.ToInt32(textBoxSize.Text);
max = Convert.ToInt32(textBoxMax.Text);
createArray = new int[size];
copyArray = new int[size];
sortArray = new int[size];
for (int i = 0; i < size; i++)
{
createArray[i] = r.Next(1, max);
}
textBoxResults.AppendText("-------------------------------------------------------------------------------" + Environment.NewLine + "Random" + Environment.NewLine + Environment.NewLine);
DisplayArrays();
}
public void InOrder()
{
size = Convert.ToInt32(textBoxSize.Text);
max = Convert.ToInt32(textBoxMax.Text);
createArray = new int[size];
copyArray = new int[size];
sortArray = new int[size];
createArray[0] = 1;
for (int i = 1; i < size; i++)
{
createArray[i] = createArray[i - 1] + r.Next(1, max);
}
for (int i = 1; i < size; i++)
{
if (r.Next(1, 101) < Convert.ToInt32(textBoxPercentage.Text))
{
for (int x = 1; x < size; x++)
{
createArray[x] = r.Next(1, createArray[size - 1]);
}
}
}
textBoxResults.AppendText("-------------------------------------------------------------------------------" + Environment.NewLine + "In Order" + Environment.NewLine + Environment.NewLine);
DisplayArrays();
}
public void ReverseOrder()
{
size = Convert.ToInt32(textBoxSize.Text);
max = Convert.ToInt32(textBoxMax.Text);
createArray = new int[size];
copyArray = new int[size];
sortArray = new int[size];
createArray[size - 1] = 1;
for (int i = size - 1; i > 0; i--)
{
createArray[i - 1] = createArray[i] + r.Next(1, max);
}
for (int i = size - 1; i > 0; i--)
{
if (r.Next(1, 101) < createArray[0])
{
for (int x = size - 1; x > 0; x--)
{
createArray[x] = r.Next(1, createArray[0]);
}
}
}
textBoxResults.AppendText("-------------------------------------------------------------------------------" + Environment.NewLine + "Reverse Order" + Environment.NewLine + Environment.NewLine);
DisplayArrays();
}
private void buttonCreateArray_Click(object sender, EventArgs e)
{
if ((textBoxSortKey.Text != "") && (textBoxCreateKey.Text != ""))
{
if (radioButtonRandom.Checked == true)
{
RandomNumber();
}
if (radioButtonInOrder.Checked == true)
{
InOrder();
}
if (radioButtonReverseOrder.Checked == true)
{
ReverseOrder();
}
}
else
{
MessageBox.Show("Type a key into the Key textbox.");
}
}
}
}
결과 표시 :
항상 일을 시작하는 이유는 확실하지 않다 순서 배열 :
-------------------------------------------------------------------------------
In Order
1
2
4
6
10
있습니다 시간 역순으로 배열이 같은 것 이 :
-------------------------------------------------------------------------------
Reverse Order
10
2
7
6
5
윈도우 형태 : 당신은 두 FORS 사이의 각의 if 문에서, 역순에 관해서 1. 배열의 첫 번째 인덱스를 초기화 중위 기능에
디버깅을하셨습니까? 코드를 한 단계 씩 살펴보고 변경되는 값을 살펴보십시오. –
당신의 문제와 * 아무것도 * 증명할 수있는 짧지 만 완전한 프로그램을 보여 주면 정말 도움이 될 것입니다. 콘솔 앱을 사용하면 훨씬 쉽게 재생산 할 수 있습니다. –
@JonSkeet 완전한 예제 프로그램입니다. 필요한 것은 붙여 넣기를 복사하고 텍스트 상자를 Windows 양식에 맞게 이름을 지정하는 것뿐입니다. 도와주세요. – techAddict82