使用Gnome排序算法对随机数列表进行排序的Windows窗体应用程序
本文关键字:排序 Windows 窗体 应用程序 列表 Gnome 算法 随机数 使用 | 更新日期: 2023-09-27 17:54:05
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
FillArray();
}
private void FillArray() { Random rnd = new Random();
for (int i = 0; i < 29; i++) { myArray[i] = rnd.Next(1, 100); } }
// Array of random integers
static int max = 29;
int[] myArray = new int[max];
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnOne_Click(object sender, EventArgs e)
{
int temp = 0;
for (int outer = 0; outer < max; outer++)
{
for (int i = 0; i < max - 1; i++)
{
if (myArray[i] > myArray[i + 1])
{
// Swap routine
temp = myArray[i + 1];
myArray[i + 1] = myArray[i];
myArray[i] = temp;
}
ShowArray();
Thread.Sleep(100);
}
}
}
private void ShowArray()
{
listBox1.Items.Clear();
for (int i = 0; i < max; i++)
{
listBox1.Items.Add(myArray[i]);
}
}
}
}
//你好,我想完成这个,但是有麻烦。我甚至不确定我是否走对了路。任何帮助都会很感激。问题是:创建一个Windows窗体应用程序,该应用程序通过使用对随机数列表排序侏儒排序算法。程序必须使用一个包含29个整数的数组。后每次迭代,程序都必须显示数组。重要:swap例程必须在使用参数的单独方法中
这是快速和肮脏的代码。我在一个新任务中启动侏儒排序,以便GUI在排序期间不会冻结。ShowArray将使用Invoke调用,以避免CrossThreadException。先看一下:
// Array of random integers
private const int MAX = 29;
private readonly int[] myArray = new int[MAX];
private void btnOne_Click(object sender, EventArgs e)
{
FillArray();
// Using Task to avoid GUI freeze
Task.Factory.StartNew(() =>
{
for (var outer = 0; outer < MAX; outer++)
{
for (var inner = 0; inner < MAX - 1; inner++)
{
if (myArray[inner] > myArray[inner + 1])
{
Swap(ref myArray[inner + 1], ref myArray[inner]);
}
ShowArray();
Thread.Sleep(50);
}
}
});
}
private void FillArray()
{
var random = new Random();
for (var i = 0; i < MAX; i++)
{
myArray[i] = random.Next(1, 100);
}
}
private void ShowArray()
{
// Using Invoke to avoid CrossThreadException
Invoke(new MethodInvoker(delegate
{
listBox1.Items.Clear();
for (var i = 0; i < MAX; i++)
{
listBox1.Items.Add(myArray[i]);
}
}));
}
private static void Swap(ref int var1, ref int var2)
{
var temp_value = var1;
var1 = var2;
var2 = temp_value;
}