private void bgWorkerBubbleSort_ProgressChanged(object sender, ProgressChangedEventArgs e) { //cập nhật giao diện thời gian thực xong chuyển đến hàm dowork StatusLocation st = e.UserState as StatusLocation; if (st == null) { return; //ko làm gì cả } if (st.movingTypes == MovingTypes.STOP) //nếu dừng tiến trình thì thay đổi giá trị của 2 nút trong mảng { Button tam = Mn[st.location2]; Mn[st.location2] = Mn[st.location1]; Mn[st.location1] = tam; return; } Button btn1 = Mn[st.location1]; Button btn2 = Mn[st.location2]; if (st.movingTypes == MovingTypes.UP_DOWN) { btn1.Top = btn1.Top + 1; //nút 1 đi lên btn2.Top = btn2.Top - 1; //nút 2 đi xuống } else if (st.movingTypes == MovingTypes.RIGHT_LEFT) { btn1.Left = btn1.Left - 1; //nút 1 qua phải btn2.Left = btn2.Left + 1; //nút 2 qua trái } else if (st.movingTypes == MovingTypes.DOWN_UP) { btn1.Top = btn1.Top - 1; //nút 1 đi xuống btn2.Top = btn2.Top + 1; //nút 2 đi lên } }
private void DiChuyenBubbleSort(int vt1, int vt2) { StatusLocation st = new StatusLocation(); st.location1 = vt1; st.location2 = vt2; st.movingTypes = MovingTypes.UP_DOWN; for (int i = 0; i < HEIGHT; i++) //Di chuyen len xuong bang chieu cao height khoi tao ban dau { //đói số 1 là 0 , tức là ko quan tâm phần trăm chạy //các bạn tưởng tượng giống phần loading của game vưa load vào //ơ phần mềm mính để 0 là ko quan tâm đến nó //đói số 2 là mấy cái vị trí của nút bgWorkerBubbleSort.ReportProgress(0, st); //gọi hàm _ProgressChanged để cập nhât giao diện System.Threading.Thread.Sleep(15); } st.movingTypes = MovingTypes.RIGHT_LEFT; int WIDTH = Math.Abs(vt1 - vt2) * (SIZE + KhoangCachNut); for (int i = 0; i < WIDTH; i++) { bgWorkerBubbleSort.ReportProgress(0, st); //gọi hàm _ProgressChanged để cập nhât giao diện System.Threading.Thread.Sleep(15); } st.movingTypes = MovingTypes.DOWN_UP; for (int i = 0; i < HEIGHT; i++) //Di chuyen len xuong bang chieu cao height khoi tao ban dau { //đói số 1 là 0 , tức là ko quan tâm phần trăm chạy //các bạn tưởng tượng giống phần loading của game vưa load vào //ơ phần mềm mính để 0 là ko quan tâm đến nó //đói số 2 là mấy cái vị trí của nút bgWorkerBubbleSort.ReportProgress(0, st); //gọi hàm _ProgressChanged để cập nhât giao diện System.Threading.Thread.Sleep(15); } st.movingTypes = MovingTypes.STOP; bgWorkerBubbleSort.ReportProgress(0, st); }
private void BubbleSort(int[] m) { int i, j; StatusLocation st = new StatusLocation();//khởi tạo vi trí st for (i = 0; i < M.Length; i++) { for (j = M.Length - 1; j > i; j--) { if (M[j] < M[j - 1]) { int tam = M[j]; M[j] = M[j - 1]; M[j - 1] = tam; System.Threading.Thread.Sleep(15);//delay cho nguoi dung xem nut di chuyen //tiep tuc tao ham di chuyen nut DiChuyenBubbleSort(j, j - 1); } } } }