排序算法

类别

时间复杂度

空间复杂度

稳定性

   平均情况

 最好情况

最坏情况

插入排序

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);
}

 

 

 

 

 

 

 

 

 

 

 

点赞