排序方法 | 最坏时间复杂度 | 最好时间复杂度 | 平均时间复杂度 |
直接插入排序 | O(n*n) | O(n) | O(n*n) |
简单选择排序 | O(n*n) | O(n*n) | O(n*n) |
冒泡排序 | O(n*n) | O(n) | O(n*n) |
快速排序 | O(n*n) | O(nlog2n) | O(nlog2n) |
堆排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) |
归并排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) |
直接插入排序实例:
void insert_sort(int r[],int rlong)
{
int i,j,temp;
for(i=2;i<rlong;i++)
{
temp=r[i];
for(j=i;j>0;j--)
{
if(temp<r[j-1])
{
r[j]=r[j-1];
}else
{
break;
}
}
r[j]=temp;
}
简单选择排序实例:
void select_srot(int r[], int n)
{
int i,j,ktemp;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;i<n;j++)
{
if(a[k]>a[j])
{
k=j;
}
}
if(k!=i)
{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
}
{
int i,j,ktemp;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;i<n;j++)
{
if(a[k]>a[j])
{
k=j;
}
}
if(k!=i)
{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
}
冒泡排序实例:
void bubbl_sort(int r[], int n)
{
int i,j,temp;
for(i=0;i<n;i++)
{
for(j=i;j<n-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[i]=a[j];
a[j]=temp;
}
}
}
}
{
int i,j,temp;
for(i=0;i<n;i++)
{
for(j=i;j<n-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[i]=a[j];
a[j]=temp;
}
}
}
}
快速排序实例:
void quick_sort(int r[],int first,int end)
{
int i=first,j=end,temp=r[first];
while(i<j)
{
while(i<j&&r[j]>=temp) j--;
r[i]=r[j];
while(i<j&&r[i]<=temp) i++;
r[j]=r[i];
}
e[i]=temp;
if(first<i-1)
quick_sort(r,first,i-1);
if(end>i+1)
quick_sort(r,i+1,end);
}
{
int i=first,j=end,temp=r[first];
while(i<j)
{
while(i<j&&r[j]>=temp) j--;
r[i]=r[j];
while(i<j&&r[i]<=temp) i++;
r[j]=r[i];
}
e[i]=temp;
if(first<i-1)
quick_sort(r,first,i-1);
if(end>i+1)
quick_sort(r,i+1,end);
}