I am developing a c# application to show how bubble sort is working.this is like a demonstration.Anyway my program is working
fine and its sorting the things well.But I have a problem Threading is not working fine.Here is the code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace Algorithm_Simulator
{
public partial class Form1 : Form
{
Random random = new Random();
int[] array = new int[6];
int Size = 6;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
RandomNumber(0, 100);
}
private void RandomNumber(int min, int max)
{
int no;
for (int i = 1; i < 7; i++)
{
if (i == 1)
{
no = random.Next(min, max);
btn1.Text = no.ToString();
array[0] = no;
}
if (i == 2)
{
no = random.Next(min, max);
btn2.Text = no.ToString();
array[1] = no;
}
if (i == 3){
no = random.Next(min, max);
btn3.Text = no.ToString();
array[2] = no;
}
if (i == 4)
{
no = random.Next(min, max);
btn4.Text = no.ToString();
array[3] = no;
}
if (i == 5)
{
no = random.Next(min, max);
btn5.Text = no.ToString();
array[4] = no;
}
if (i == 6)
{
no = random.Next(min, max);
btn6.Text = no.ToString();
array[5] = no;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
BubbleSort(array,Size);
}
public void BubbleSort(int[] array, int Size)
{
int temp ;
for (int pass = 1; pass < Size; pass++)
{
for (int i = 0; i < Size-pass; i++)
{
if (array [i] > array [i+1])
{
if (i == 0)
{
btn1.BackColor = Color.Yellow;
Thread.Sleep(2000);
btn2.BackColor = Color.Yellow;
}
if (i == 1)
{
btn2.BackColor = Color.Yellow;
btn3.BackColor = Color.Yellow;
}
if (i == 2)
{
btn3.BackColor = Color.Yellow;
btn4.BackColor = Color.Yellow;
}
if (i == 3)
{
btn4.BackColor = Color.Yellow;
btn5.BackColor = Color.Yellow;
}
if (i == 4)
{
btn5.BackColor = Color.Yellow;
btn6.BackColor = Color.Yellow;
}
if (i == 5)
{
btn6.BackColor = Color.Yellow;
}
Thread.Sleep(2000); // this Thread not working
temp = array[i] ;
array[i] = array [i+1] ;
Thread.Sleep(2000); // this Thread not working
array [i+1] = temp ;
Thread.Sleep(2000); // this Thread not working
}
}
}
a();
}
public void a()
{
btn1.Text = array[0].ToString();
btn2.Text = array[1].ToString();
btn3.Text = array[2].ToString();
btn4.Text = array[3].ToString();
b();
}
public void b()
{
btn5.Text = array[4].ToString();
btn6.Text = array[5].ToString();
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace Algorithm_Simulator
{
public partial class Form1 : Form
{
Random random = new Random();
int[] array = new int[6];
int Size = 6;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
RandomNumber(0, 100);
}
private void RandomNumber(int min, int max)
{
int no;
for (int i = 1; i < 7; i++)
{
if (i == 1)
{
no = random.Next(min, max);
btn1.Text = no.ToString();
array[0] = no;
}
if (i == 2)
{
no = random.Next(min, max);
btn2.Text = no.ToString();
array[1] = no;
}
if (i == 3){
no = random.Next(min, max);
btn3.Text = no.ToString();
array[2] = no;
}
if (i == 4)
{
no = random.Next(min, max);
btn4.Text = no.ToString();
array[3] = no;
}
if (i == 5)
{
no = random.Next(min, max);
btn5.Text = no.ToString();
array[4] = no;
}
if (i == 6)
{
no = random.Next(min, max);
btn6.Text = no.ToString();
array[5] = no;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
BubbleSort(array,Size);
}
public void BubbleSort(int[] array, int Size)
{
int temp ;
for (int pass = 1; pass < Size; pass++)
{
for (int i = 0; i < Size-pass; i++)
{
if (array [i] > array [i+1])
{
if (i == 0)
{
btn1.BackColor = Color.Yellow;
Thread.Sleep(2000);
btn2.BackColor = Color.Yellow;
}
if (i == 1)
{
btn2.BackColor = Color.Yellow;
btn3.BackColor = Color.Yellow;
}
if (i == 2)
{
btn3.BackColor = Color.Yellow;
btn4.BackColor = Color.Yellow;
}
if (i == 3)
{
btn4.BackColor = Color.Yellow;
btn5.BackColor = Color.Yellow;
}
if (i == 4)
{
btn5.BackColor = Color.Yellow;
btn6.BackColor = Color.Yellow;
}
if (i == 5)
{
btn6.BackColor = Color.Yellow;
}
Thread.Sleep(2000); // this Thread not working
temp = array[i] ;
array[i] = array [i+1] ;
Thread.Sleep(2000); // this Thread not working
array [i+1] = temp ;
Thread.Sleep(2000); // this Thread not working
}
}
}
a();
}
public void a()
{
btn1.Text = array[0].ToString();
btn2.Text = array[1].ToString();
btn3.Text = array[2].ToString();
btn4.Text = array[3].ToString();
b();
}
public void b()
{
btn5.Text = array[4].ToString();
btn6.Text = array[5].ToString();
}
}
}
please tell me how do I solve this? where I should put the thread
Thanks
VulpesPosted Aug 26, 2011, 9:02 AM
Here's how I'd do it. I'm assuming that the buttons all have different colors to start with and you want them to retain their colors when they are in sorted order. You don't need to deal with the case i == 5 as it will never be called: