最值 还有运行直接结束问题

有一个长度为n的整数序列,其中最大值和最小值不会出现在序列的第一和最后一个位置。

请写一个程序,把序列中的最小值与第一个数交换,最大值与最后一个数交换。输出转换好的序列。
#include
int main()
{
int n,i=0,pos;
int a[]={};
int temp,j;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",a[i]);
}

    temp=a[i];
    pos=i;
    for(j=i+1;j<n;j++)
    {
    if(a[0]<a[j])
        {
            a[j]=temp;
            pos=j;
        }   
    }   
a[pos]=a[i];
a[i]=temp;

    temp=a[i];
    pos=i;
     i=n;
    for(j=i-1;j>=0;j--)
    {
    if(a[i]>a[j])
        {
            a[j]=temp;
            pos=j;
        }   
    }   
a[pos]=a[i];
a[i]=temp;
for(i=0;i<n;i++)
{
    printf("%d",a[i]);
}
return 0;

}
为什么直接结束了运行 应该怎么写才对 我用dev c++写的
我还碰到一个问题 运行时出现 “0x77el4995”志林或引用的“0x77bbfc42e”内存,该内存不能为“written”
要终止程序,请点击“确定”
要调试程序,请点击“取消”

我大概看了一下你的代码,说实话乱七八糟,我不认为你那代码能通过编译器检查~
我写了一份,你自己看看吧

 #include<stdio.h>
#define MAX 50
int main()
{
    int max = 0,//最大值下标
        min = 0;//最小值下标
    int n;//数列长度
    int sq[MAX];//数列,C声明数组一定要指定数组长度,java不能指定长度,其他不知道
    printf("输入数列长度:");
    scanf("%d",&n);//输入时要传的是地址
    printf("依次输入数列");
    //循环初始化数组,同时确定最小值和最大值
    for (int i = 0; i < n;i++) {
        scanf("%d",&sq[i]);
        if (sq[i]<sq[min]) {
            min = i;
        }
        if (sq[i]>sq[max]) {
            max = i;
        }
    }
    //将最小值换到第一位
    int temp=sq[0];
    sq[0] = sq[min];
    sq[min] = temp;
    //将最大值换到最后一位
    temp = sq[n - 1];
    sq[n - 1] = sq[max];
    sq[max] = temp;
    //循环输出数列
    printf("调整后数列:");
    for (int i = 0; i < n;i++) {
        printf("%d",sq[i]);
    }

}

你写的代码编译器不报错?

int a[]={};
这里就错了,这里分配的数组是0长度的

scanf("%d",a[i]);
这里内存都在越界读写,当然报错。

int a[100]; //可以这么写,当然下面n不能大于100
或者
int * a;
scanf("%d",&n);
a = (int *)malloc(sizeof(int) * n);

1.拿数组中2-n的值和第一个值比较,得到最小的。2.拿2-(n-1)和最后一个值比较,大值放最后。

代码真的有点乱七八糟。。。

在结尾加一行readykey();

看着好乱,思路不清晰