Вывод массива через функцию после сортировки - C (СИ)
Формулировка задачи:
У меня есть небольшая проблема, помогите, пожалуйста.
Как мне распечатать массив после его сортировки ? Если использовать обычный фор, то у меня получается ошибка сегментации
#include<stdio.h>
#include<string.h>
void bubble(char *items, int count)
{
register int a, b;
register char t;
for(a=1; a < count; ++a)
for(b=count-1; b >= a; --b) {
if(items[b-1] > items[b]) {
t = items[b-1];
items[b-1] = items[b];
items[b] = t;
}
}
}
void insertSort(char a[], int length)
{
int i, j, value;
for(i = 1; i < length; i++)
{
value = a[i];
for (j = i - 1; j >= 0 && a[j] > value; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = value;
}
}
void selectSort(int* arr, int size)
{
int tmp, i, j, pos;
for(i = 0; i < size; ++i) // i - номер текущего шага
{
pos = i;
tmp = arr[i];
for(j = i + 1; j < size; ++j) // цикл выбора наименьшего элемента
{
if (arr[j] < tmp)
{
pos = j;
tmp = arr[j];
}
}
arr[pos] = arr[i];
arr[i] = tmp; // меняем местами наименьший с a[i]
}
}
int main(){
int a,i;
scanf("%d",&a);
int b[a];
for (i = 0; i<a; i++)
scanf("%d",&b[i]);
//for (i = 0; i<a; i++)
// printf("%d ", b[i]);
printf("Выберети метод сортировки:\n Сортировка пузырьковая - 1 \n Сортировка вставками - 2 \n Сортировка слияниями - 3 \n");
scanf("%d",&a);
switch(a)
{
case 1:
printf("Пузырьковая сортировка\n");
// bubble(b, strlen(b));
// printf("Отсортированная строка: %s.\n", b);
break;
case 2:
printf("Сортировка вставками\n");
// insertSort(b, strlen(b));
// printf("Отсортированная строка: %s.\n", b);
break;
case 3:
printf("Сортировка выбором\n");
selectSort(b, sizeof(b));
for (i=0; i < sizeof(b); ++i)
printf("Отсортированная строка: %d.\n", b[i]);
break;
}
return 0;
}Решение задачи: «Вывод массива через функцию после сортировки»
textual
Листинг программы
selectSort(b, sizeof(b) / sizeof(b[0])); for (i=0; i < sizeof(b) / sizeof(b[0]); ++i)
Объяснение кода листинга программы
- В данном коде предполагается, что функция selectSort() используется для сортировки массива b.
- Функция selectSort() принимает два аргумента: b и size, где size - это размер массива b.
- В данной постановке задачи, размер массива b вычисляется как результат деления sizeof(b) на sizeof(b[0]) (предполагается, что b[0] является первым элементом массива).
- Затем, с помощью цикла for, происходит итерация по всем элементам массива b, начиная с индекса 0 и до размера массива.
- В каждой итерации цикла, значение элемента массива выводится на экран.
- Значение переменной i увеличивается на 1 после каждой итерации цикла.
- Предполагается, что в процессе сортировки элементы массива меняются местами, но в данном коде это не отражено.
- Предполагается, что элементы массива b уже инициализированы до вызова функции selectSort().
- Предполагается, что функция selectSort() изменяет порядок элементов массива b на месте, без создания дополнительных массивов.
- Предполагается, что элементы массива b являются типа данных, для которых определена операция сравнения
<. - Предполагается, что в процессе сортировки элементы массива не пропускаются и не удаляются.
- Предполагается, что в процессе сортировки элементы массива не дублируются.
- Предполагается, что в процессе сортировки элементы массива не изменяются, кроме их порядка.
- Предполагается, что функция selectSort() возвращает void, то есть не возвращает никакого значения.
- Предполагается, что функция selectSort() не принимает дополнительных аргументов, кроме b и size.
- Предполагается, что в процессе сортировки элементы массива не выходят за пределы массива.
- Предполагается, что в процессе сортировки элементы массива не перезаписываются.
- Предполагается, что элементы массива b могут быть любого типа данных, для которых определена операция сравнения
<. - Предполагается, что элементы массива b могут быть размещены в памяти подряд.
- Предполагается, что элементы массива b могут быть упорядочены по возрастанию или по убыванию.