注册 登录
编程论坛 C++教室

求解哪里产生了违例访问?

阻碍 发布于 2014-11-05 22:39, 416 次点击
#include<iostream>
#include<fstream>
#include<stdlib.h>
//#include<time.h>
//#include <algorithm>

using namespace std;

#define length 100

int partition(int a[],int m,int n)
{
    int i=m;
    int j=n+1;
    int x=a[m];
    while(1)
    {
        while(a[++i]<x);
        while(a[--j]>x);
        if(i>=j)
         break;
        else{
         int temp=a[i];
         a[i]=a[j];
         a[j]=temp;
         }
    }
}

void quicksort(int a[],int m,int n)
{
    if(m<n)
    {
       int q=partition(a,m,n);
       quicksort(a,m,q-1);
       quicksort(a,q+1,n);
       }
}

int main()
{
    int a[length];
//    time_t start,end;
    int i;
//    srand((unsigned)time(NULL));
    ifstream fin;
    fin.open("random_number.txt");
    if(!fin)
    {
        cout<<"can not open file 'random_number.txt'";
        return -1;
    }
    else
    {
        for(i=0;i<length;i++)
        {
            fin>>a[i];
        }
    }
    fin.close();
//    start=clock();
    quicksort(a,0,length-1);
//    end=clock();

    for(i=0;i<length;i++)
    {
        printf("%d",a[i]);
    }
    system("pause");
    //return 0;
}
6 回复
#2
stop12042014-11-06 07:56
int q=partition(a,m,n);
循环中的变量 j 有问题
        while(a[++i]<x);
        while(a[--j]>x);  //循环50次

fin>>a[i];    如果我读如一个长度超过整型的数.那么将出现错误.

你能跟我说下你想要这个程序要实现什么功能吗

[ 本帖最后由 stop1204 于 2014-11-6 08:09 编辑 ]
#3
阻碍2014-11-06 09:23
回复 2 楼 stop1204
随机数的快速排序
#4
阻碍2014-11-06 10:00
回复 2 楼 stop1204
该怎么修改啊?
#5
stop12042014-11-06 11:17
回复 4 楼 阻碍
如果确定你的随机数可以到几十位一个的话 那就用long double型
#6
阻碍2014-11-06 11:35
回复 5 楼 stop1204
我的随机数最大的999,都是不超过三位的
#7
stop12042014-11-06 18:04
回复 6 楼 阻碍
首先呢. 如果我random_number.txt 就存了5组数字
但是你读取的还是100次.即 另外95个是其他内存的数据
 if (fin.eof())
                break;
你得要先判断什么时候读取完毕.然后返回数字数量.再带入partition(int a[],int m,int n)

而且 你并没有用到&引用.  所以就算你排序完毕,最后在main输出的结果还是没排序的
1