常用排序算法

        数据排序开发中经常使用到的,而数据排除则需应用到排序算法,常用的排序算法不外乎就几类,不同的排序算法,其性能效率和应用范围都不同。对于一般小数量的排序,任选一排序算法即可。常用的排序算法有:

冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序、基数排序

排序 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 复杂性
冒泡排序 O(n2)O(n2) O(n2)O(n2) O(n)O(n) O(1)O(1) 稳定 简单
选择排序 O(n2)O(n2) O(n2)O(n2) O(n)O(n) O(1)O(1) 不稳定 简单
插入排序 O(n2)O(n2) O(n2)O(n2) O(n)O(n) O(1)O(1) 稳定 简单
快速排序 O(nlog2n)O(nlog2n) O(n2)O(n2) O(nlog2n)O(nlog2n) O(nlog2n)O(nlog2n) 不稳定 较复杂
堆排序 O(nlog2n)O(nlog2n) O(nlog2n)O(nlog2n) O(nlog2n)O(nlog2n) O(1)O(1) 不稳定 较复杂
归并排序 O(nlog2n)O(nlog2n) O(nlog2n)O(nlog2n) O(nlog2n)O(nlog2n) O(n)O(n) 稳定 较复杂
希尔排序 O(nlog2n)O(nlog2n) O(n2)O(n2) O(n)O(n) O(1)O(1) 不稳定 较复杂
基数排序 O(d(n+r))O(d(n+r)) O(d(n+r))O(d(n+r)) O(d(n+r))O(d(n+r)) O(n+r)O(n+r) 稳定 较复杂

1.冒泡排序

         冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。排序过程中,因为越大(小)的元素会经由交换慢慢“浮”到数列的顶端,因此称作“冒泡排序”。

void bubble_sort(int a[], int n)
{
    int i, j, temp;
    for (j = 0; j < n - 1; j++)
        for (i = 0; i < n - 1 - j; i++)
        {
            if(a[i] > a[i + 1])
            {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
}

2.选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

void select_sort(int A[],int n)
{
    int i,j,min,m,temp;
    for(i=0;i<n-1;i++)
    {
        min=i;//查找最小值
        for(j=i+1;j<n;j++)
        {
            if(A[min]>A[j])
            {
                min=j;
            }
        }
        if(min != i)
        {
       	    temp   = A[min];
       	    A[min] = A[i];
       	    A[i]   = temp;
        }
     }
}

3.插入排序

        插入排序(Insertion sort)的基本操作就是将一个数据插入到已经排序的有序数据中,从而得到一个新的、个数加一的有序数据。算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。

void insert_sort(int *a,unsigned int n)
{
    int i,j;
    int temp;
    for(i = 1; i < n; i++)
    {
        temp=*(a+i);
        for(j=i; j>0 && *(a+j-1)>temp; j--)
        {
            *(a+j)=*(a+j-1);
        }
        *(a+j)=temp;
    }
}

 

 

 

 

 

 

posted @ 2017-12-27 23:30  Acuity  阅读(59)  评论(0)    收藏  举报