求帮助,以下是我学习的内排序的一些算法,求大神帮我解决有注释的
#include <iostream>using namespace std;
template<class Type>
void Swap(Type *array,Type a,Type b)
{ Type temp;
temp=array[a];
array[a]=array[b];
array[b]=temp;
}
template<class Type>
void FastSort(Type *array,Type n)
{ for(int i=0;i<n;i++)
{ for(int j=i;j>0;j--)
{ if(array[j]<array[j-1])
Swap(array,j,j-1);
}
//else break;//求解这句话为啥是错的
}
}
template<class Type>
void ImprovedFastSort(Type *array,Type n)
{ Type temprecord;
for(int i=1;i<n;i++)
{temprecord=array[i];
int j=i-1;
while((j>=0)&&(temprecord<array[j]))
{array[j+1]=array[j];
j=j-1;
}
array[j+1]=temprecord;
}
}
template<class Type>
void Display(Type *array,Type n)
{cout<<"The array is :"<<endl;
for(int i=0;i<n;i++)
cout<<" "<<array[i];
cout<<endl;
}
template<class Type>
void BinaryIsertSort(Type *array,Type n)
{ Type temprecord;
int left,right,middle;
for(int i=1;i<n;i++)
{temprecord=array[i];
left=0;
right=i-1;
while(left<=right)
{middle=(left+right)/2;
if(temprecord<array[middle])
right=middle-1;
else left=middle+1;
}
for(int j=i-1;j>=left;j--)
array[j+1]=array[j];
array[left]=temprecord;
}
}
template<class Type>
void BubbleSorter(Type *array,Type n)
{ for(int i=1;i<n;i++)
for(int j=n-1;j>=i;j--)
if(array[j]<array[j-1])
Swap(array,j,j-1);
}
template<class Type>
void ImprovedBubbleSorter(Type *array,Type n)
{ bool noswap;
for(int i=1;i<n;i++)
{ noswap=true;
for(int j=n-1;j>=i;j--)
if(array[j]<array[j-1])
{Swap(array,j,j-1);
noswap=false;
}
if(noswap)
return;
}
}
template<class Type>
void ShellSort(Type *array,Type n)
{ //ModifideIsertSort(Type ,Type);//为啥这里函数的声明是错的
for(int delta=n/2;delta>0;delta/=2)
for(int j=0;j<delta;j++)
//ModifiedInsertSort(array,n);//以下是调用的函数,不能调用
{for(int i=delta;i<n;i+=delta)//这是函数体的内容,就是下面的一个函数
for(int j=i;j>=delta;j-=delta)
{if(array[j]<array[j-delta])
Swap(array,j,j-delta);
}
}
}
template<class Type>
void ModifideIsertSort(Type *array,Type n)
{ for(int i=delta;i<n;i+=delta)
for(int j=i;j>=delta;j-=delta)
{if(array[j]<array[j-delta])
Swap(array,j,j-delta);
}
}
template<class Type>
void Merge(Type *array,Type *temprecord,Type left,Type right,Type middle)
{ for(int j=left;j<=right;j++)
temprecord[j]=array[j];
int index1=left;
int index2=middle+1;
int i=left;
while((index1<=middle)&&(index2<=right))
{if(temprecord[index1]<=temprecord[index2])
array[i++]=temprecord[index1++];
else array[i++]=temprecord[index2++];
}
while(index1<=middle)
array[i++]=temprecord[index1++];
while(index2<=right)
array[i++]=temprecord[index2++];
}
template<class Type>
void TwoWayMergeSort(Type *array,Type *temprecord,Type left,Type right)
{ if(left<right)
{Type middle=(left+right)/2;
TwoWayMergeSort(array,temprecord,left,middle);
TwoWayMergeSort(array,temprecord,middle+1,right);
Merge(array,temprecord,left,right,middle);
}
}
template<class Type>
Type SelectPivot(Type left,Type right)
{ return (left+right)/2;
}
template<class Type>
Type Partition(Type *array,Type left,Type right)
{ Type temp;
int i=left;
int j=right;
temp=array[j];
while(i!=j)
{while((array[i]<temp)&&(j>i))
i++;
if(i<j)
{array[j]=array[i];
j--;
}
while((array[j]>temp)&&(j>i))
j--;
if(i<j)
{array[i]=array[j];
i++;
}
}
array[i]=temp;
return i;
}
template<class Type>
void QuickSort(Type *array,Type left,Type right)
{ if(left<=right)
return ;
int pivot=SelectPivot(left,right);
Swap(array,pivot,right);
pivot=Partition(array,left,right);
QuickSort(array,left,pivot-1);
QuickSort(array,pivot+1,right);
}
int main()
{ int *a,i,n,*b;
cin>>n;
a=new int [n];
b=new int [n];
for(i=0;i<n;i++)
cin>>a[i];
Swap(a,3,2);
Display(a,n);
FastSort(a,n);
Display(a,n);
ImprovedFastSort(a,n);
Display(a,n);
BinaryIsertSort(a, n);
Display(a,n);
BubbleSorter(a,n);
Display(a,n);
ImprovedBubbleSorter(a,n);
Display(a,n);
ShellSort(a,n);
Display(a,n);
TwoWayMergeSort(a,b,0,n-1);
Display(a,n);
QuickSort(a,0,n-1);
Display(a,n);
return 0;
}