读书人

为什么输入choice == 2的时候程序没

发布时间: 2012-04-11 17:42:33 作者: rapoo

求助,为什么输入choice == 2的时候程序没有反应???


#include"sort.h"


//快速排序法
void quickSort(int a[],int pstr1,int pstr2)
{
if(pstr1 < pstr2)
{
int k = partition(a,pstr1,pstr2);
quickSort(a,pstr1,k-1);//用一个递归函数分别排序k前后位置的两个子数列
quickSort(a,k+1,pstr2);
}

}
int partition(int a[],int pstr1,int pstr2)
{
int key = a[pstr1];
int lo = pstr2+1;
for(int j = pstr2;j > pstr1;j-- )//j和lo同时向前一步,这样若是a[j]<key那么就相当于a[lo]和啊a[j]没有交换
{
if(a[j]>key)//要使a[j]和a[lo]同时向前那么需要每次自减1所以开始lo要自己加上1
{
lo = lo-1;
swap(&a[j],&a[lo]);
}
}
swap(&a[lo-1],&a[pstr1]);
return lo-1 ;
}
void swap(int *pstr1,int *pstr2)
{
int temp;
temp = *pstr1;
*pstr1= *pstr2;
*pstr2 = temp;
}


//选择排序法
void selectSort(int radomNumber[],int size)
{
if(size != 1)
{
int i,j,k,temp;

for(i=0;i<size;i++)
{

k=i;//先假设k是最小的数字的下标
for(j=i+1;j< size;j++)
{
if(radomNumber[k]>radomNumber[j])//如果后面的比前面的小的话就先交换数的下标
k=j;
}
temp=radomNumber[i];
radomNumber[i]=radomNumber[k];
radomNumber[k]=temp;
}
selectSort(radomNumber,size - 1);
}

}

//以上是调用的函数排序的算法,下面是文件操作的.cpp


#include<fstream>

#include <iostream>

using namespace std;

#include<ctime>

using std::time;

#include<cstdlib>

using std::srand;
using std::rand;
using std::exit;

#include<istream>

using std::getline;

#include"sort.h"

#include<istream>

using std::getline;

#include<ctime>

using std::clock;

const int RANDOMNUM = 30000;

//产生随机数并将它存入文件中
void produceRandomNumber()
{
srand( time(0) );
//创建文件并以输出方式打开文件
ofstream creatFile;
creatFile.open( "random.txt", ios::out );

//判断打开是否成功
if( !creatFile.is_open() )
{
cerr << "open error!" << endl;
exit( 1 );
}

//产生30000个随机数并存入文件中
for( int i = 1; i <= RANDOMNUM; i++ )
{
creatFile << rand();//将产生的随机数存入文件中
creatFile << '\t';//将产生的数据分隔开
}
//关闭文件
creatFile.close();
}

//从文件中获取随机数并存入数组中
void achieveRandomFromFile()
{
int sortArray[RANDOMNUM];
//以输入方式打开文件(从文件输到数组)
ifstream readFile;
readFile.open( "random.txt", ios::in );

if( !readFile.is_open() )
{
cout << "open error!" << endl;
exit( 1 );
}

//将文件中的数据存入数组中
for ( int i = 1; !readFile.eof() && i <= RANDOMNUM; i++ )
{
readFile >> sortArray[i];
}
produceAscendingNumber(sortArray);
readFile.close();

}


//生成相应排序法的所对应文件
void produceAscendingNumber(int sortArray[])
{

size_t tbegin,tend ;
tbegin = clock();
int choice = 0;


while(choice != 4)
{
cout << "30000个随机数已生成。\n" << "请选择:\n" << "1.快速排序 2.选择排序 3.退出程序" << endl;
cin >> choice;

switch(choice)
{
case 1:
quickSort(sortArray,0,RANDOMNUM);
break;
case 2:
selectSort(sortArray,RANDOMNUM);
break;
case 3:
exit(0);
break;
default:
break;
}
produceNumber(sortArray,choice);
print(sortArray,RANDOMNUM);
tend = clock();
double time = (double)(tend - tbegin);
cout << "运行时间为: " << time << endl;
}
}
void produceNumber(int sortArray[],int choice)
{
//创建文件并以输出方式打开文件
ofstream creatFile;
if(choice == 1)
creatFile.open( "quickSort.txt", ios::out );
if(choice == 2)
creatFile.open( "selectSort.txt", ios::out);
if( !creatFile.is_open() )
{
cerr << "open error!" << endl;
exit( 1 );
}
//将已经排序好的数据数组存入文件中
for( int i = 0; i < RANDOMNUM; i++ )
{
creatFile << sortArray[i];//将生成的数组存入文件中
creatFile << '\t';//将产生的数据分隔开
}
//关闭文件
creatFile.close();


}
void print(int a[],int size)
{
for(int i = 0;i < size;i++)
{
cout << a[i] << '\t';
}
cout << endl;
}




[解决办法]

C/C++ code
//选择排序法void selectSort(int radomNumber[],int size){  if(size != 1)  {  int i,j,k,temp;  for(i=0;i<size;i++)  {  k=i;//先假设k是最小的数字的下标  for(j=i+1;j< size;j++)  {  if(radomNumber[k]>radomNumber[j])//如果后面的比前面的小的话就先交换数的下标  k=j;  }  if(i-k){  //---------- swap(&radomnumber[i],&radomnumber[k]);    temp=radomNumber[i];    radomNumber[i]=radomNumber[k];    radomNumber[k]=temp;}  }//  selectSort(radomNumber,size - 1);  //------------- ? 有必要再做吗?  }} 

读书人网 >C++

热点推荐