为什么pta提交会段错误?

问题遇到的现象和发生背景
#include <stdio.h>
#include <stdlib.h>
int ispaixu(int n,int m);
int main(void)
{  
    int m,n;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
    ispaixu(n,m);
    }
    return 0;
    }
int ispaixu(int n,int m)
{   int k,i,l,temp,min,weizhi;
    int a[100000];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }    
    for(k=0;k<m-1;k++)
    {  min = a[k];
    for(i=k+1;i<n;i++)
    {
        if(a[i]<min)
        {
            min = a[i];
            weizhi = i;
        }
    }
        temp = a[k];
        a[k] = min;
        a[weizhi] = temp;    
    }
    for(l=0;l<n-1;l++)
    {
    printf("%d ",a[l]);    
    }
    printf("%d",a[n-1]);
    printf("\n");
    
    }

题目是:7-9 m趟选择排序 (10 分)
先在第一行输入整数n和m,再在第二行输入n个整数构成的数列,要求利用选择排序(每趟排序最多交换一次)进行排序,并输出第m趟排序后的数列状况。请把选择排序定义为一个函数。

输入格式:
测试数据有多组,处理到文件尾。对于每组测试,先在第一行输入整数n和m(1<m<n<=40),再在第二行输入n个整数。

输出格式:
对于每组测试,输出m趟选择排序后的结果,每两个数据之间留一个空格。

输入样例:
6 3
3 5 1 2 8 6
4 3
9 8 7 6
输出样例:
1 2 3 5 8 6
6 7 8 9

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

21行处要加一个weizhi = 0;否则如果第一个数就是最小值,那这个weizhi就没有赋值,是个乱码

for(k=0;k<m-1;k++)
{
    min = a[k];
    weizhi = k;  //这里加上weizhi = k;
for(i=k+1;i<n;i++)

你题目的解答代码如下:

#include <stdio.h>
#include <stdlib.h>
int ispaixu(int n,int m);
int main(void)
{
    int m,n;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
    ispaixu(n,m);
    }
    return 0;
    }
int ispaixu(int n,int m)
{   int k,i,l,temp,min,weizhi;
    int a[100000];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(k=0;k<m-1;k++)
    {
        min = a[k];
        weizhi = k;  //加上weizhi = k;
    for(i=k+1;i<n;i++)
    {
        if(a[i]<min)
        {
            min = a[i];
            weizhi = i;
        }
    }
        temp = a[k];
        a[k] = min;
        a[weizhi] = temp;
    }
    for(l=0;l<n-1;l++)
    {
    printf("%d ",a[l]);
    }
    printf("%d",a[n-1]);
    printf("\n");
}

img

如有帮助,望采纳!谢谢!

数组变小也不对,也显示段错误