首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-11 
求助,为什么输入choice 2的时候程序没有反应???#includesort.h//快速排序法void quickSort(int a[],i

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

热点排行