那位好友帮忙看一下这个程序那不合适,我怎么样都改不掉它的错误。
#include<iostream.h>#include<iomanip.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
//简单选择排序
template<class T>
void SelectSort(T A[],int n)
{
int small;
for(int i=0;i<n-1;i++)
{
small;
for(int j=i+1;j<n;j++)
if(A[j]<A[small])
small=j;
if(i!=small)
Swap(A[i],A[small]);
}
}
//直接插入排序
template<class T>
void InsertSort(T A[],int n)
{
for(int i=0;i<n;i++)
{
int j=i;
T temp=A[i];
while(j>0;&&temp<A[j-1]){
A[j]=A[j-1];
j--;}
A[j]=temp;
}
}
//冒泡排序
template<class T>
void BubbleSort(T A[], int n) {
int i,j,last;
i=n-1;
while ( i>0 ) {
last=0;
for(j=0; j<i; j++)
if (A[j+1]<A[j]){
Swap(A[j],A[j+1]);
last=j;
}
i=last;
}//endwhile
//快速排序
template <class T>
void QuickSort(T A[],int n) {
QSort(A,0,n-1);
}
template <class T>
void QSort(T A[],int left,int right){
int i,j;
if ( left<right ) {
i=left; j=right+1;
do{
do i++; while (A[i]<A[left]);
do j--; while (A[j]>A[left]);
if (i<j) Swap(A[i],A[j]);
}while (i<j);
Swap(A[left],A[j]);
QSort(A,left,j-1); QSort(A,j+1,right);
}//endif
}
//两路合并排序
template <class T>
void Merge(T A[], int i1, int j1, int i2, int j2) {
T *Temp=new T[j2-i1+1];
int i=i1, j=i2, k=0;
while (i<=j1 && j<=j2) {
if (A[i]<=A[j]) Temp[k++]=A[i++];
else Temp[k++]=A[j++];
}
while (i<=j1) Temp[k++]=A[i++]; //剩余部分存入temp
while (j<=j2) Temp[k++]=A[j++];
for(i=0; i<k; i++) A[i1++]=Temp[i];
delete[] Temp;
}
template <class T>
void MergeSort(T A[], int n){
int i1,j1,i2,j2
int size=1;
while ( size<n ) {
i1=0;
while ( i1+size<n ) {
i2=i1+size; j1=i2-1; //确定子序列的长度
if (i2+size-1>n-1) j2=n-1;
else j2=i2+size-1;
Merge(A,i1,j1,i2,j2);
i1=j2+1;
}
size *=2; //子序列长度增加2倍
}//endwhile
}
//堆排序
template <class T>
void AdjustDown(T A[], int r, int j)
{
int child=2*r+1;
T temp=A[r];
while(child<=j) {
if((child<j)&&(A[child]<A[child+1])) child++;
if (temp>= A[child]) break;
A[(child-1)/2]=A[child];
child=2*child+1;
}
A[(child-1)/2]=temp;
}
template <class T>
void HeapSort(T A[], int n)
{
for(int i=(n-2)/2; i>-1; i--)
AdjustDown(A,i,n-1);
for(i=n-1; i>0; i--){
Swap(A[0],A[i]);
AdjustDown(A,0,i-1);
}
}
void mian()
{
int A[20];
int i,k,B=1;
cout<<"运行结果:\n";
srand(time(0));
cout<<"排序前数组:\n";
for(i=1;i<=20;i++)
{
A[i]=rand()%100;
cout<<A[i]<<" ";
}
while(B)
{
cout<<" \n 请输入选择(1--6)";
cout<<"1:简单选择排序 2:直接插入排序\n";
cout<<"3:冒泡排序 4:快速排序\n";
cout<<"5:两路合并排序 6:堆排序\n";
cout<<"7:退出\n";
cout<<"选择数k:";
cin>>k;
if(k<0||k>7)
cout<<"输入选择错误,请重新输入!\n";
switch(k)
{
case 1:SelectSort(A[20],i);break;
case 2:InsertSort(A[20],i);break;
case 3:BubbleSort(A[20],i);break;
case 4:QuickSort(A[20],i);break;
case 5:MergeSort(A[20],i);break;
case 6:HeapSort(A[20],i);break;
case 7:return;
}
cout<<"排序后的数组是:\n";
for(i=1;i<=20;i++)
cout<<A[i]<<" ";
cout<<endl;
}
getch();
}
}