посмотрим, что у вас в буфере

Отправлено 27 September 2010 - 20:37
Отправлено 27 September 2010 - 20:49
Отправлено 27 September 2010 - 21:00
Отправлено 27 September 2010 - 21:23
private void Sort(BackgroundWorker worker, DoWorkEventArgs e) { List<int> lines; int lineChange = 0, endIndex, progress = 0, currentProgress = 0; //ищем строки с элементом 1 на главной диагонали int[] toSort = GetLines(true).ToArray(); if (toSort.Length > 0) { int coeff = ((toSort.Length == count) ? 3 : 4), tmp = toSort.Length; //сортируем по убыванию shellSort(ref toSort, lineChange, count); lines = new List<int>(toSort); while (lines.Count > 0) { if (worker.CancellationPending) { e.Cancel = true; } else { while (lines.Contains(lineChange) && (lineChange < count)) { lines.Remove(lineChange); lineChange++; } if (lineChange == count) return; //вытаскиваем на первые позиции Change(ref matrix, lineChange, lines[0]); lines.RemoveAt(0); lineChange++; currentProgress = (int)((1 - (float)lines.Count / tmp) / coeff * 100d); worker.ReportProgress(progress + currentProgress); } } progress += currentProgress; toSort = GetLines(true).ToArray(); if (toSort.Length > 1) { lineChange = 0; shellSort(ref toSort, lineChange, toSort.Length); lines = new List<int>(toSort); while (lines.Count > 0) { if (worker.CancellationPending) { e.Cancel = true; } else { if (lineChange != lines[0]) { //сортируем строки с элементом 1 на главной диагонали между собой Change(ref matrix, lineChange, lines[0]); lines.Remove(lineChange); } lines.RemoveAt(0); lineChange++; currentProgress = (int)((1 - (float)lines.Count / tmp) / coeff * 100d); worker.ReportProgress(progress + currentProgress); } } } progress += currentProgress; lines = GetLines(true); endIndex = lines.Count; while (lines.Count > 0) { if (worker.CancellationPending) { e.Cancel = true; } else { int startIndex = lines[0]; //сдвигаем в строке столбцы с элементом 1 как можно больше влево //сначала k столбцов ShiftColumns(ref matrix, startIndex, startIndex, endIndex - 1); //потом (n - k) столбцов ShiftColumns(ref matrix, startIndex, endIndex, matrix[startIndex].Length - 1); lines.RemoveAt(0); currentProgress = (int)((1 - (float)lines.Count / tmp) / coeff * 100d); worker.ReportProgress(progress + currentProgress); } } } progress += currentProgress; //ищем строки с элементом 0 на главной диагонали toSort = GetLines(false).ToArray(); if (toSort.Length > 0) { lineChange = count - toSort.Length; shellSort(ref toSort, lineChange, toSort.Length); lines = new List<int>(toSort); //вытаскиваем на первую позицию среди строк с элементом 0 на главной диагонали //строку с большим количеством элементов 1 (n - k) столбцах if ((lines.Count > 0) && (lines[0] != lineChange) && CheckEqualTopLines(matrix, lineChange, lineChange, lines[0])) Change(ref matrix, lineChange, lines[0]); lines = GetLines(false); int tmp = lines.Count; while (lines.Count > 0) { if (worker.CancellationPending) { e.Cancel = true; } else { int startIndex = lines[0]; //сдвигаем столбцы с элементом 1 как можно больше влево ShiftColumns(ref matrix, startIndex, startIndex + 1, count - 1); lines.RemoveAt(0); currentProgress = (int)((1 - (float)lines.Count / tmp) * 100d / ((tmp == count) ? 1 : 4)); worker.ReportProgress(progress + currentProgress); } } } }
Отправлено 27 September 2010 - 21:36
Отправлено 27 September 2010 - 23:06
Отправлено 28 September 2010 - 01:12
Отправлено 28 September 2010 - 07:30
Отправлено 28 September 2010 - 08:38
Отправлено 28 September 2010 - 08:45
Отправлено 28 September 2010 - 21:12
Отправлено 28 September 2010 - 21:52
Отправлено 28 September 2010 - 22:36
Отправлено 28 September 2010 - 22:42
0 пользователей, 0 гостей, 0 анонимных