| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 643 人关注过本帖
标题:万恶的段错误,我这的不知道他错哪里了,求助啊
只看楼主 加入收藏
战斗!立
Rank: 2
等 级:论坛游民
帖 子:29
专家分:43
注 册:2011-11-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
万恶的段错误,我这的不知道他错哪里了,求助啊
#include<stdio.h>
#include<math.h>
#define N 10
int small[N];
int big[N];

void init_array(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
        a[i]=random();
}

void print(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
        printf("%d\n",a[i]);
}

void quick_sort(int a[],int start,int end)
{
    if(start >= end)    return;
    int i,j,k;
    int temp,mid;
    i=0;
    j=0;
    k=0;
    temp=a[start];
    for(i=start+1;i<=end;i++)
    {
        if(a[i]<temp)
            small[j++]=a[i];
        else
            big[k++]=a[i];
    }//将数分成两个数组
    mid=j;
    a[mid]=temp;
    for(i=0;i<mid;i++)
    {
        a[i]=small[i];
    }
    for(i=mid+1,k=0;i<=end;i++,k++)
    {
        a[i]=big[k];
    }    //放回原来数组
    quick_sort(a,start,mid-1);
    quick_sort(a,mid+1,end);
}

void main()
{
    int a[N];
    init_array(a,N);
    //bubble_sort(a,N);
    //insert_sort(a,N);
    //select_sort(a,N);
    quick_sort(a,0,N);
    print(a,N);
}
搜索更多相关主题的帖子: include return start 
2011-12-13 21:18
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
回复 楼主 战斗!立
数组有越界,
  for(i=start+1;i<=end;i++)//end等N

总有那身价贱的人给作业贴回复完整的代码
2011-12-13 21:24
战斗!立
Rank: 2
等 级:论坛游民
帖 子:29
专家分:43
注 册:2011-11-26
收藏
得分:0 
回复 2楼 embed_xuel
谢谢哦,这个数组是不可能越界的,我已经把他的设到end==N了
2011-12-13 21:30
战斗!立
Rank: 2
等 级:论坛游民
帖 子:29
专家分:43
注 册:2011-11-26
收藏
得分:0 
回复 2楼 embed_xuel
不好意思,我看出来了是越界了,不要意思
2011-12-13 21:53
easonchanel
Rank: 2
等 级:论坛游民
帖 子:18
专家分:41
注 册:2011-8-23
收藏
得分:5 
越界了
2011-12-14 08:41
wangkangluo1
Rank: 1
等 级:新手上路
帖 子:4
专家分:9
注 册:2011-12-6
收藏
得分:5 
valgrind gdb
2011-12-14 09:47
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:5 
a[N]局部变量,被调用后a[N]依然没有被赋值。
2011-12-14 11:41
战斗!立
Rank: 2
等 级:论坛游民
帖 子:29
专家分:43
注 册:2011-11-26
收藏
得分:0 
回复 7楼 天天涯涯
no 是mid应该取start+j
2011-12-14 13:27
战斗!立
Rank: 2
等 级:论坛游民
帖 子:29
专家分:43
注 册:2011-11-26
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<math.h>
#define N 100000
int small[N];
int big[N];

void init_array(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
        a[i]=random();
}

void print(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
        printf("%d\n",a[i]);
}

void bubble_sort(int  a[],int n)//冒泡排序
{
    register int i=0,j=0,temp;
    for(i=0;i<n;i++)
        for(j=0;j<n-i-1;j++)
        {
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
}
void insert_sort(int a[],register int n)//插入排序
{
    register int i,j,temp;
    /*for(i=1;i<n;i++)
    {
        temp = a[i];
        for(j=i;j>0;j--)
        {
            if(a[j-1]>temp)
                a[j]=a[j-1];
                a[j-1]=temp;
        }
    }*/    
    for(i=1;i<n;i++)
    {
         for(j=i-1,temp = a[i];j>=0&&temp<a[j];j--)
        {
            a[j+1]=a[j];
        }
        a[j+1]=temp;
    }
}

void quick_sort(int a[],int start,int end)
{
    if(start >= end)    return;
    int i,j,k;
    int temp,mid;
    i=0;
    j=0;
    k=0;
    temp=a[start];
    for(i=start+1;i<=end;i++)
    {
        if(a[i]<temp)
            small[j++]=a[i];
        else
            big[k++]=a[i];
    }//将数分成两个数组
    mid=start+j;
    a[mid]=temp;
    for(i=start,k=0;k<j;i++,k++)
    {
        a[i]=small[k];
    }
    for(i=mid+1,k=0;i<=end;i++,k++)
    {
        a[i]=big[k];
    }    //放回原来数组
    //for(i=0;i<j;i++)
    //    printf("small[%d]=%d\n",i,small[i]);
    //for(i=0;i<k;i++)
    //    printf("big[%d]=%d\n",i,big[i]);
    //for(i=0;i<end;i++)
    //    printf("a2[%d]=%d\n",i,a[i]);
    quick_sort(a,start,mid-1);
    quick_sort(a,mid+1,end);
}
void select_sort(int a[],register int n)//选择排序
{
    register int i,j,temp,item;
    for(i=n;i>0;i--)
    {
        temp=a[0];
        for(j=0;j<=i;j++)
        {    
            if(temp<a[j])
            {
                temp=a[j];    
                item=j;
            }
                
        }
        a[item]=a[i];
        a[i]=temp;
        n-=1;
    }
}
void main()
{
    int a[N];
    init_array(a,N);
    //bubble_sort(a,N);
    //insert_sort(a,N);
    //select_sort(a,N);
    quick_sort(a,0,N);
    print(a,N-1);
}

这是我改正之后的代码,原来有很多思路都不对劲,谢谢楼上的指点,知错就改
2011-12-14 14:20
快速回复:万恶的段错误,我这的不知道他错哪里了,求助啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020917 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved