Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Сортировка массивов




Цель работы: изучение приёмов сортировки одномерных массивов данных, выработка умений алгоритмизации и программирования задач сортировки массивов, отладки и тестирования программ с массивами.

/* Программа 11. Программа демонстрирует типовые процедуры сортировки массивов по заданным условиям: удаление элементов, сортировка по возрастанию значений чисел, перемещение элементов. Задачи решаются без использования дополнительных массивов. */

// Прототипы функций программы:

void in_arr(int *arr, int n); // Ввод n чисел массива arr

void out_arr(int *arr, int n); // Вывод n элементов массива arr

int array_del_0(int *arr, int &n); // Удаление из массива нулевых элементов

// Сортировка массива по возрастанию чисел методом пузырька

void sort_bubble(int *x, int n);

// перемещение "-"-ых элементов в массиве после первого "-"-го элемента

void move_negative_numbers(int *x, int n);

#include <stdio.h>

#include <conio.h>

main()

{ int i, j, k, n;

int x[50];

printf("\n Введите размер массива n: \n");

scanf("%d", &n);

in_arr(x, n);

printf(" \n Исходный массив размером %d: \n", n);

out_arr(x, n);

// Удаление из массива нулевых элементов

k = array_del_0(x, n);

printf("\n\n Массив после удаления k = %d нулевых элементов: \n", k);

out_arr(x, n);

// Сортировка массива по возрастанию чисел методом пузырька

n = 10;

randomize();

for(i = 0; i < n; i++)

x[i] = random(20);

printf("\n\n Исходный массив: \n");

out_arr(x, n);

printf("\n Массив после сортировки методом пузырька: \n");

sort_bubble(x, n);

out_arr(x, n);

// Перемещение элементов x[i] < 0 в массиве после первого элемента x[k] < 0

n = 10;

for(i = 0; i < n; i++)

x[i] = random(20) - 10;

printf("\n\n Исходный массив: \n");

out_arr(x, n);

printf("\n В массиве x[i] < 0 перемещены после 1-го элемента x[k] < 0: \n");

move_negative_numbers(x, n);

out_arr(x, n);

getch();

return 0;

}

// Ввод n чисел массива arr[ ]

void in_arr(int *arr, int n)

{ printf("\n Введите %d чисел массива: ", n);

for (int i = 0; i < n; i++)

scanf("%d", arr++); // ввод по указателю

}

// Вывод n элементов массива arr[ ]

void out_arr(int *arr, int n)

{ for (int i = 0; i < n; i++)

{ printf(" %d ", *arr++); // вывод по указателю и переход

// на следующий элемент массива

if ((i+1) % 10 == 0) // вывод по 10 чисел в строке:

printf("\n");

}

}

// Удаление из массива нулевых элементов

// ТЕСТ: n = 5, x = 1, 0, 3, 0, 4 ==> n = 3, x = 1, 3, 4

int array_del_0(int *arr, int &n)

{ int i, j, k;

for (i = 0, k = 0; i < n; i++)

if (arr[i] == 0) k++;

else { j = i - k;

arr[j] = arr[i];

}

n = n - k; // размер массива после удаления нулевых элементов

return k; // количество удалённых нулевых элементов

}

// Сортировка массива по возрастанию чисел методом пузырька

// ТЕСТ: n = 5, x = 6, 2, 1, 4, 3 ==> x = 1, 2, 3, 4, 6

void sort_bubble(int *x, int n)

{ int i, k, w;

for(k = 1; k < n; k++) // перебор всех неупорядоченных частей

// массива размером n-k+1

for(i = 0; i < n-k; i++) // перестановка максимального числа из

// неупорядоченной части массива размером n-k+1 в конец этой части

if(x[i] > x[i+1]) // перестановка большего числа вправо

{ w = x[i];

x[i] = x[i+1];

x[i+1] = w;

}

}

// перемещение "-"-ых элементов в массиве после первого "-"-го элемента

// ТЕСТ: n = 6, x = 1, -2, 3, -4, -5, 6 ==> x = 1, -2, -4, -5, 3, 6

void move_negative_numbers(int *x, int n)

{ int i, k = n, w;

for(i = 0; i < n - 2; i++) // поиск 1-го "-"го элемента

if(x[i] < 0) { k = i + 1; break; }

if(k == n) return; // "-"х чисел в массиве нет или перестановка

// не требуется

for(i = k; i < n; i++) // перемещение "-"-х элементов после 1-го

// "-"-го элемента

if(x[i] < 0)

{ w = x[i];

x[i] = x[k];

x[k] = w;

k++;

};

}

Вопросы и упражнения

1. На какой элемент массива указывает индекс k в функции move_negative_numbers()?

2. Составьте алгоритм удаления из массива элемента хi, заданного
индексом i.

3. Составьте алгоритм удаления из массива элемента, заданного значением этого элемента.

4. Составьте алгоритм, по которому можно поменять местами первый и последний положительные элементы в массиве.

5. Составьте алгоритм сортировки массива методом выбора: находится минимальный элемент массива и меняется местами с первым элементом, далее процедура повторяется для неупорядоченной части массива.

6. Напишите функции для алгоритмов упражнений 2-5.

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 484 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент всегда отчаянный романтик! Хоть может сдать на двойку романтизм. © Эдуард А. Асадов
==> читать все изречения...

2481 - | 2215 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.