Не работает сортировка массива: Ошибка сегментирования - C (СИ)
Формулировка задачи:
Всем доброго вечера.
Дали задание в университете:
Дана последовательность из n чисел элементов.Сформулировать новую последовательность,в которой сначала расположены в порядке возрастания все отрицательные элементы исходной последовательности,а затем в порядке убывания все положительные элементы.Исходную и полученную последовательности вывести на экран для сравнения.
Я столкнулся с ошибкой сегментирования!Не могу понять,в кокой строчке ошибка.
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- int main()
- {
- int n,i,j,x;
- int a[100],b[100];
- for (;;)
- {
- printf("Введите количество элементов : \n");
- scanf("%d",&n);
- if (n==0) break;
- printf("Введите элементы массива : \n");
- for (i=0;i<n-1;i++)
- {
- scanf("%d",&a[i]);
- }
- for (i=1;i<n-1;i++)
- {
- if (a[j-1]<0 && a[j]<0 && a[j-1]<a[j]<0)
- x=a[j-1];
- a[j-1]=a[j];
- a[j]=x;
- if ((a[j-1]>0) && (a[j]<=0) || (a[j-1]=0) && (a[j]<0))
- x=a[j-1];
- a[j-1]=a[j];
- a[j]=x;
- if (a[j-1]>0 && a[j]>0 && a[j-1]>a[j]<0)
- x=a[j-1];
- a[j-1]=a[j];
- a[j]=x;
- }
- printf("результат : \n");
- for (i=0;i<n-1;i++);
- printf("%d",&a[i]);
- for (i=j=0;i<n;i++)
- {
- b[j++]=a[i];
- }
- printf("Результат : %d \n",a[i],b[j]);
- return 0;
- }
- }
Решение задачи: «Не работает сортировка массива: Ошибка сегментирования»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- int input(int a[],int n)
- {
- int i,m;
- // do
- // {
- printf("введите количество элементов массива : \n");
- scanf("%d",&m);
- // }
- // while (m<0||m>n);
- printf("Введите элементы массива : \n");
- for (i=0;i<m;i++)
- {
- printf("a[%d]=",i);
- scanf("%d",&a[i]);
- }
- return m;
- }
- //вывод//
- void output(int a[],int n)
- {
- int i;
- for (i=0;i<n;i++)
- printf("%d ",a[i]);
- }
- //сортировка по неубыванию//
- void sort_one(int a[],int n, int t)
- {
- int i,j,m;
- for (i=t;i<n-1;i++)
- for(j=t; j<n-1; j++)
- if(a[j]<a[j+1])
- {
- m=a[j];
- a[j]=a[j+1];
- a[j+1]=m;
- }
- }
- //сортировка отрицательных чисел//
- int sort_two(int a[],int n)
- {
- int i,j,t=0,m;
- for (i=0;i<n;i++)
- if(a[i]<0)
- {
- m=a[t];
- a[t]=a[i];
- a[i]=m;
- j=t;
- while(j>0 && a[j]<a[j-1])
- {
- m=a[j];
- a[j]=a[j-1];
- a[j-1]=m;
- }
- t++;
- }
- return t;
- }
- //новый массив//
- //main//
- int main()
- {
- int i,a[100],b[100],n,t;
- for (;;)
- {
- n=input(a,n);
- printf("Исходный массив : \n");
- output(a,n);
- t=sort_two(a,n);
- sort_one(a,n,t);
- printf("Новый массив : \n");
- output(a,n);
- }
- return 0;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д