已经编译通过
//快速排序
void RightQuickSort(int *array, int start, int end)
{
int i=start; int j=end;
int key=array[start];
while(i<j)
{
while(i<j && array[j]>key ) j--;
if(i<j)
{
array[i]=array[j]; i++;
}
while(i<j && array[i]<key ) i++;
if(i<j)
{
array[j]=array[i]; j--;
}
}
array[i]=key;
if(start<i-1)
RightQuickSort(array,start,i-1);
if(i+1<end)
RightQuickSort(array,i+1,end);
}
//冒泡排序
void BubbleSort(int* array,int n)
{
for(int i=0;i<n-1;++i)
{
bool exchange=false;///////若一趟之内没有交换,说明已经是有序,则不必进行下一趟循环。
for(int j=0;j<n-1-i;++j)
{
if(array[j]>array[j+1])
{
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
exchange=true;//////
}
}
if(exchange==false) return;///////
}
}
//直接插入排序
void InsertSort(int *array,int n)
{
for(int i=1;i<n;i++)
{
int key=array[i];
int j=i-1;
while(j>=0 && array[j]>key)
{
array[j+1]=array[j];
j--;
}
array[j+1]=key;
}
}
//折半查找插入排序
void InsertBinarySort(int *array,int n)
{
for(int i=1;i<n;i++)
{
int key=array[i];
int low=0;int high=i-1;
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]>key)
high=mid-1;
else
low=mid+1;
}
int j;
for( j=i-1;j>=low;j--)
array[j+1]=array[j];
array[low]=key;
}
}
//shell排序
void ShellPassSort(int *array,int n,int d)
{
for(int i=0;i<n;i++)
{
int key=array[i];
int j=i-d;
while(j>=0 && array[j]>key)
{
array[j+d]=array[j];
j-=d;
}
array[j+d]=key;
}
}
void ShellSort(int *array, int n)
{
int d[]={4,2,1};
for(int i=0;i<3;i++)
ShellPassSort(array,n,d[i]);
}
本文深入探讨了四种经典的排序算法:快速排序、冒泡排序、直接插入排序和折半查找插入排序。详细解释了每种算法的工作原理、实现细节,并通过代码示例展示了它们的应用。此外,文章还对比了这些算法的时间复杂度和适用场景,帮助读者理解如何根据具体需求选择最合适的排序方法。

被折叠的 条评论
为什么被折叠?



