求助,为什么输入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); //------------- ? 有必要再做吗? }}