//直接插入排序 稳定
void insert(int r[],int n)
{
for(int i=2;i<=n;i++)
{
r[0]=r[i];
int j=i-1;
while(r[0]<r[j])
{
r[j+1]=r[j];
j--;
}
r[j+1]=r[0];
}
}
//希尔排序 不稳定
void shellsort(int r[],int n)
{
for(int d=n/2;d>=1;d=d/2)
{
for(int i=d+1;i<=n;i++)
{
r[0]=r[i];
int j=i-d;
while(j>0&&r[0]<r[j])
{
r[j+d]=r[j];
j=j-d;
}
r[j+d]=r[0];
}
}
}
//起泡排序 稳定
void bublesort(int r[],int n)
{
int j,exchange,bound,temp;
exchange=n-1;
while(exchange!=0)
{
bound=exchange;
exchange=0;
for(j=0;j<bound;j++)
if(r[j]>r[j+1])
{
temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
exchange=j;
}
}
}
//快速排序 不稳定
int partition(int r[],int first,int last)
{
int i=first,j=last,temp;
while(i<j)
{
while(i<j&&r[i]<=r[j])j--;
if(i<j)
{
temp=r[i];
r[i]=r[j];
r[j]=temp;
i++;
}
while(i<j&&r[i]<=r[j])
i++;
if(i<j)
{
temp=r[i];
r[i]=r[j];
r[j]=temp;
j--;
}
}
return i;
}
void quicksort(int r[],int first,int last)
{
if(first>=last)return ;
else{
int pivot=partition(r,first,last);
quicksort(r,first,pivot-1);
quicksort(r,pivot+1,last);
}
}
//选择排序 不稳定
void selectsort(int r[],int n)
{
int i,j,index,temp;
for(i=0;i<n-1;i++)
{
index=i;
for(j=i+1;j<n;j++)
if(r[j]<r[index])
index=j;
if(index!=i)
{
temp=r[i];
r[i]=r[index];
r[index]=temp;
}
}
}
//堆排序 不稳定
void sift(int r[],int k,int m)
{
int i=k;
int j=2*i;
int temp=r[i];
while(j<=m)
{
if(j<m&&r[j]<r[j+1])j++;
if(r[i]>r[j])
break;
else{
int t=r[i];
r[i]=r[j];
r[j]=t;
i=j;
j=2*i;
}
}
}
void heapsort(int r[],int n)
{
for(int i=n/2;i>=1;i--)
sift(r,i,n);
for(int i=1;i<n;i++)
{
int temp=r[1];
r[1]=r[n-i+1];
r[n-i+1]=temp;
sift(r,1,n-i);
}
}
常用排序算法
最新推荐文章于 2024-10-11 12:01:25 发布
本文介绍了几种常见的排序算法,如插入排序、希尔排序、起泡排序、快速排序、选择排序和堆排序,并分析了它们在排序过程中的稳定性特性。
摘要由CSDN通过智能技术生成