Базы данных для карманного персонального компьютера

Способы сортировок

Показывать лекцию целиком

Задача темы: изучить методику и получить навыки в разработке функциональности приложений, использующих сортировки текстовых данных.

Разработка: Приложение "Способы сортировки" для сортировки массива цифровых переменных.

Состав выполняемых функций:

  • Файловые операции: нет
  • Алгоритмы: пузырковая и Quick-сортировка
  • Информационно-справочные:нет
  • Наращивание функциональности не предусматривается.

    Защита данных предусматривается только от неквалифицированных действий пользователей.

    В качестве входных данных используется набор переменных. Выходные данные программы – графическое отображение результатов в виде двух листбоксов в форме для SmartDevice.

    Шаг 1. Разработка графического интерфейса

    Используется только одна форма Form1 с одним текстовым полем, двумя листбоксами и тремя кнопками "Добавить", "Пузырек" и "Квик". Примерный дизайн приведен на рис.6.1.

    (рис 6.1)

    Шаг 2. Добавление системных библиотек

    using System;
    using System.Drawing;
    using System.Collections;
    using System.Windows.Forms;
    using System.Data;
    // добавляем библиотеку сомпонентов
    using System.ComponentModel;

    Шаг 3. Добавляем массив переменных в состав public class Form1 : System.Windows.Forms.Form

    int[] numbers = new int[16];

    Шаг 4. Создаем процедуру ввода данных в листбоксы

    Для кнопки "Добавить" пишем:

    private void button1_Click(object sender, System.EventArgs e)
    { // Проверка - если в текстовом поле не цифра
    if (!char.IsDigit(textBox1.Text[0]))	{
    	textBox1.Text = "Введите цифру";
    	MessageBox.Show("Введите цифру!","Ошибка");
    	return; // влзврат в вызывающую программу}
    listBox1.Items.Add(textBox1.Text); // добавляем строку в листбокс 1
    listBox2.Items.Add(textBox1.Text); // добавляем строку в листбокс 2
    }

    Шаг 5. Создаем процедуру пузырьковой сортировки

    Для кнопки "Пузырек" пишем:

    private void button2_Click(object sender, System.EventArgs e) {
    bool flipped = false; // определяем булеву переменную со значением false
    for(int i = listBox1.Items.Count - 1; i <= 0; i--) {// вложенный цикл
    for(int j = 0; j < i; j++)	{/* преобразуем цифры в числа Int32 и
     задаем условие проверки значений по строкам */
    if(Convert.ToInt32(listBox1.Items[j]) < 
       Convert.ToInt32(listBox1.Items[j + 1]) ) 
    		{
    	Object temp = listBox1.Items[j]; // определяем массив
    	listBox1.Items[j] = listBox1.Items[j + 1];
    	listBox1.Items[j + 1] = temp;
    	flipped = true; // переопределяем булеву переменную
    		}
    } 
    if(!flipped) return;
    	}
    }

    Шаг 6. Создаем функцию сортировки "Квик"

    void QuickSort(ref int[] a, int lo0, int hi0)
    {
    int lo = lo0;
    int hi = hi0;
    if(lo <= hi) 	{return;}
    else if( lo = = hi - 1 )  
    {// если необходимо, меняем два соседних элемента местами
    	if (a[lo] < a[hi])	{
    	int T = a[lo];
    	a[lo] = a[hi];
    	a[hi] = T;
    	}
    return;
    }
    int pivot = a[(lo + hi) / 2];  // меняем местами средний
    a[(lo + hi) / 2] = a[hi];      // и верхний элементы
    a[hi] = pivot;
    while( lo < hi ) {
    	while (a[lo] <= pivot  lo < hi)	// слева направо
    	{// ищем элемент,
    	lo++;	// больший среднего
    	}
    while (pivot <= a[hi]  lo < hi )	// справа налево
    	{// ищем элемент,
    	hi--;	// меньший среднего
    	}
    if( lo < hi )	// меняем найденные
    {// элементы местами
    int T = a[lo];
    a[lo] = a[hi];
    a[hi] = T;
    }
    }
    a[hi0] = a[hi]; // помещаем средний элемент в центр списка
    a[hi] = pivot;
    QuickSort(ref a, lo0, lo-1); // рекурсивно вызываем функцию
    QuickSort(ref a, hi+1, hi0);
    }

    Шаг 7. Создаем процедуру вызова функции сортировки "Квик"

    Для кнопки "Квик" пишем:

    int[] intItems = new int[listBox2.Items.Count]; 
    /* задаем массив из значений, выбираемых в листбоксе 3 
    и запускаем цикл перебора значений в массиве
    */
    for(int i = 0; i < listBox2.Items.Count; i++) /
    intItems[i] = Convert.ToInt32(listBox2.Items[i]);
    // вызываем функцию сортировки
    QuickSort(ref intItems, 0, listBox2.Items.Count - 1);
    for(int i = 0; i < listBox2.Items.Count; i++)
    // переписываем массив в отсортировонном виде
    listBox2.Items[i] = intItems[i]; 
    }
    Вернуться к учебному плану