类别 | 时间复杂度 | 空间复杂度 | 稳定性 | ||
平均情况 | 最好情况 | 最坏情况 | |||
插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
冒泡排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
选择排序 | O(n^2) | O(n^2) | O(n^2) | O(1) | 不稳定 |
快速排序 | O(nlogn) | O(nlogn) | O(n^2) | O(logn) | 不稳定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不稳定 |
归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 稳定 |
希尔排序 | 不稳定 | ||||
基数排序 | 稳定 |
C语言:
1.冒泡排序
void bubble(int arr[],int size){
int i,j,temp;
for(i = 0; i < size-1; i++){
for(j = i; j < size-1-i; j++){
if(arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
2.选择排序
void Selection(int arr[],int size){
int i,j,k,temp;
for(i = 0; i < size-1; i++){
k = i;
for(j = i; j < size; j++){
if(arr[j] < arr[k]){
k = j;
}
}
temp = arr[k];
arr[k] = arr[i];
arr[i] = temp;
}
}
3.插入排序
void insert_sort(int arr[],int size)
{
int i,j,k;
for(i=0;i<=size;i++)
{
j=i-1;
k=arr[i];
while(j>-1&&k<arr[j])
{
arr[j+1]=arr[j];
j--;
}
arr[j+1]=k;
}
}
4.快速排序
void quick_sort(int arr[],int left,int right)
{
int i=left,j=right,k=arr[left],t;//k储存准基数
if(i>j)
return ;
while(i!=j)
{
while(i<j&&arr[j]>=k)//必须是先从右边比较,否则准基数归位时将出错
j--;
while(i<j&&arr[i]<=k)
i++;
if(i<j)
{
t=arr[i];arr[i]=arr[j];arr[j]=t;
}
}
arr[left]=arr[i];
arr[i]=k;
quick_sort(arr,left,i-1);
quick_sort(arr,i+1,right);
}