2 qq 36710036 qq_36710036 于 2017.01.13 18:02 提问

用的GCC 选择法排序出现段错误 求解

make后没有错误提示,就是运行时提示段错误

#include
#include

#define M 10

void main(void)
{
int i,j,tmp,k;
int a[M] = {23,45,48,12,17,15,11,24,27,28};
for (i = 0;i < (M-1);i++)
{
k = j;
for (j =(i+1);j < M;j++)
{
if(a[k] > a[j])
k=j;
}

if (i != k)
{
tmp=a[k];
a[k]=a[i];
a[i]=tmp;
}

}

for (i = 0;i < M;i++)
printf("%d\t",a[i]);
printf("\n");
}

2个回答

jhcconan614
jhcconan614   2017.01.16 22:12

for循环的第一条语句,还没有给j赋值,(那么j就是一个随机值),你就敢把j赋值给k……

jhcconan614
jhcconan614   2017.01.16 22:24

还有一个问题:你的排序好像没有完全,最后两个没有排序;

请参考:http://blog.csdn.net/jhcconan614/article/details/53354997

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
gcc编译通过,运行却显示“段错误”的解决方法
​第一次在Liunx上(liunx mint 17)使用gcc编译c文件,竟然提示“找不到stdio.h",经过google后发现执行 sudo apt-get install build-essential即可,详见:http://slipper-99933.blog.163.com/blog/static/39954044201021651833785/​。     ​刚学习了柔性数组,照教
用选择法对10个整数排序
问题 1023: C语言程序设计教程(第三版)课后习题7.2 时间限制: 1Sec 内存限制: 128MB 提交: 513 解决: 339 题目描述 用选择法对10个整数从小到大排序。 输入 10个整数 输出 排序好的10个整数 样例输入 4 85 3 234 45 345 345 122 30 12 样例输出 3 4 12 30 45 85 122 234
用选择法对数组中10个整数由大到小排序
#include int main () { int i = 0; void sort(int array[],int n); int a[10]; printf("enter array:\n"); for(i = 0;i < 10;i ++) { scanf("%d",&a[i]); } printf("the sorted array:\n"); for(i = 0;
【C++】用sort函数产生的段错误问题
sort函数的cmp必须按照规定来写,即必须只是 > 或者  比如: return a > b; return a  b; 而不能是 = ,(实际上等于号加了也是毫无意义,sort是不稳定的排序),否则可能会出现段错误
用选择法对10个整数排序。
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者: 刘同宾 * 完成日期:2012 年 11 月 26 日 * 版 本 号:v1.0 * 输入描述: * 问题描述:用选择法对10个整数排序。
用选择法对10个整数从小到大排序。
#include using namespace std; int main() {int n,i,j,k,temp,s[10]; for(i=0;i {cin>>n;  s[i]=n; } for(i=0;i  { k=i;   for(j=0;j   {if(s[k]     if(k!=i)       {temp=s[i];         s[i]
指针对数组排序选择法和冒泡法
选择法代码: #include main() { int i,j,t,a[10]={9,8,7,6,5,4,3,2,1,0},*p=a; for (i=0;i<9;i++) for (j=i+1;j<10;j++) { if (*(a+i)>*(a+j)) { t=*(a+i); *(a+i)=*(a+j); *(a+j)=t; }
数组排序(交换法与选择法)
交换法与选择法降序排序交换法交换法对数组数组进行排序的基本思路 就是先让数组(n个数)中的最左边的一个数(用i=0代表)与其右边的每一个数(从j=i+1开始)依次(j++)进行比较,若遇到比其大的数(score[j]>score[i]),则将较大的那个数的值赋给自己,自己成为较大数继续与后面的数比较,以此类推,一轮后(即j=n时),让i自增1,重复上述循环直至i=n-1.下面以一个有5个数的数组演示
C语言1.用选择法对10个整数排序。10个整数用scanf函数输入。
用选择法对10个整数排序。10个整数用scanf函数输入
7.3 用选择法对10个整数排序(从小到大)。
7.3(改)用选择法对10个整数排序(从大到小) 原题是从小到大,由于题目看错,写成从大到小了。 #include//7.3(改)用选择法对10个整数排序(从大到小) int main() { int i,j,a[11],temp; for(i=1;i<=10;i++) { printf("请输入a[%d]:",i); scanf("%d",&a[i]); fflush