| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3481 人关注过本帖
标题:显示没有错误,但运行时显示.exe文件停止工作,无法将数据写入文件
只看楼主 加入收藏
杏仁巧克力
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-4-1
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:8 
显示没有错误,但运行时显示.exe文件停止工作,无法将数据写入文件
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //用到了time函数
int  quicksort();
void insertsort();
void merge();
void merge_sort();
int main()
{
    int a[1000000];
    int i,number,number1;
    FILE *fp1,*fp2;
   
    srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
    //将随机产生的10000个数放入 input.text
    fp1=fopen("input.txt","r+");
    if(fp1==NULL)
    {
        printf("open file failed\n");
        return -1;
    }
    for (i=0; i<50; i++)
    {
        if(i%10==0&&i!=0)
            printf("\n");
        number = rand() % 101; //产生0-100的随机数
        a[i]=number;
        fprintf(fp1,"%d ", number);
        
    }
    quicksort(a,50);
    fclose(fp1);

    //将排好序的数放入output.text
    fp2=fopen("output.txt","w");
    if(fp2==NULL)
    {
      printf("open file failed\n");
      return -1;
    }
    for(i=0;i<50;i++)
    {
      if(i%10==0&&i!=0)
          printf("\n");
      fprintf(fp2,"%d ",quicksort(a,50));
    }
    fclose(fp2);
    return 0;
}

//快速排序
int quicksort(int a[],int number)
{
  int i=0;
  int j=number-1;
  int key=a[0];
  if(number>1)  //一个数不需排序
  {
    while(i!=j)  //i=j是排序停止
    {
      for(;i<j;j--)
      {
        if(key>a[j])
        {    a[i]=a[j];
            break;
        }
      }
      for(;i<j;i++)
      {
        if(key<a[i])
        {
            a[j]=a[i];
            break;
        }
        
      }
      a[i]=key;
    }
     //递归调用,分治的思想,直到数组个数为1停止
    quicksort(a,i);   //将原来的数组一分为二,前半部分
    quicksort(a+i+1,number-i-1);//后半部分
  }
  return 0;
}
搜索更多相关主题的帖子: include number return failed file 
2016-04-04 17:33
杏仁巧克力
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-4-1
收藏
得分:0 
求大神啊啊啊~~~~~~~~~~
2016-04-04 17:47
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:5 
程序代码:
int Partiton(int *array,int i,int j,int key)  /*划分子序列*/
{
  int l,r,t;
  l=i; /*左边界*/
  r=j; /*右边界*/
  do{
    t=array[l];
    array[l]=array[r];
    array[r]=t;
    while(array[l]<key)
      l=l+1;
    while(array[r]>=key)
      r=r-1;
  }while(l<=r);
  return l;
}
void QuickSort(int *array,int i,int j)  /*对数组array[i]...array[j]进行快速排序*/
{
  int index,key;
  key=a[(j-i)/2];  /*排序关键字*/
  index=Partition(array,n,i,j,key);  /*以key边界,重复划分子序列*/
  QuickSort(array,i,index-1);  /*左序列排序*/
  QuickSort(array,index,j);    /*右序列排序*/
}



[此贴子已经被作者于2016-4-4 18:26编辑过]


未佩好剑,转身便已是江湖
2016-04-04 18:20
杏仁巧克力
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-4-1
收藏
得分:0 
回复 3楼 alice_usnet
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
2016-04-04 20:06
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:0 
void QuickSort(int *array,int i,int j)  /*对数组array[i]...array[j]进行快速排序*/
 {
   int index,key;
   key=a[(j-i)/2];  /*排序关键字*/    a数组未定义
   index=Partition(array,n,i,j,key);  /*以key边界,重复划分子序列*/
   QuickSort(array,i,index-1);  /*左序列排序*/
   QuickSort(array,index,j);    /*右序列排序*/
 }

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-04-04 20:28
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:10 
回复 4楼 杏仁巧克力
问题出在第一句:
int a[100 0000]
一百万!!!,我用Dev C++一写了一个空的程序,就这一句,编译运行他就奔溃了。。。。。。
其他还有没错我就不知道了。但是一百万确实是太大了。。。相信没有那个老师会出这种题目,一般都是十万的,或者就是动态分配。

φ(゜▽゜*)♪
2016-04-04 21:23
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:5 
编译程序的过程中,如果没有得到自己想要的结果,其实你不妨在程序中插入几句Printf,这样你就可以知道程序是在卡在哪个位置了,又或者是哪个地方的计算结果出了问题,
想你的这个程序一运行就直接停止工作,那就说明问题是出在第一个printf和scanf之前的,那个地方一看就只有几个声明语句,改改试试也就出来了/

φ(゜▽゜*)♪
2016-04-04 21:27
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:0 
回复 5楼 zhulei1978
不好意思,写错了

未佩好剑,转身便已是江湖
2016-04-04 21:42
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:0 
回复 4楼 杏仁巧克力
这个是快速排序的代码,加个主函数就可以运行了。

未佩好剑,转身便已是江湖
2016-04-04 21:44
快速回复:显示没有错误,但运行时显示.exe文件停止工作,无法将数据写入文件
数据加载中...
 
   



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

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