zoukankan      html  css  js  c++  java
  • C语言面试题分类->排序算法

    1.选择排序。

      每次将最小的数,与剩余数做比较。找到更小的,做交换。

      时间复杂度:O(n²)

      空间复杂度:O(1)

      优缺点:耗时但内存空间使用小。

    void selectSort(int *p,int len)
    {
        int i, j,tmp;
        for(i = 0; i < len; i++)
        {
            for(j = i+1; j < len; j++)
            {
                if(p[i] > p[j])
                {
                     tmp = p[i];
                    p[i] = p[j];
                    p[j] = tmp;
                }
            }
        }
    
    }
    int main()
    {
        int array[8] = {4,2,7,9,3,10,6,11};
     //popupSort1(array,8);
    //  popupSort2(array,5);
      //  selectSort(array,8);
        insertion_sort(array, 8);
        int i;
        for(i = 0;i<8;i++)
        {
            printf("%d ",array[i]);
        }
    }

    2。冒泡排序

      一轮比较两个相邻的数,获得一个最大的数仍在后边。

      时间复杂度:O(n²)

      空间复杂度:O(1)

      优点:稳定。

    void popupSort1(int *p,int len)
    {
        int i, j, tmp;
        for(i = 0; i < len ; i++)
        {
            for(j = i; j < len -1; j++)
            {
                if(p[j] > p[j+1])
                {
                     tmp = p[j];
                    p[j] = p[j+1];
                    p[j+1]  = tmp;
                }
            }
        }
    }
    int main()
    {
        int array[8] = {4,2,7,9,3,10,6,11};
     //popupSort1(array,8);
    //  popupSort2(array,5);
      //  selectSort(array,8);
        insertion_sort(array, 8);
        int i;
        for(i = 0;i<8;i++)
        {
            printf("%d ",array[i]);
        }
    }

    3。插入排序

      把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程.

      时间复杂度:O(n²)

      空间复杂度:O(1)

      优点:稳定。

    //插入排序
    void insertion_sort(int array[], int length)
    
    {
    
        int i, j;
        int temp; // 用来存放临时的变量
    
        for(i = 1; i < length; i++)
        {
            temp = array[i];
    
            for(j = i-1; (j >= 0)&&(array[j] > temp); j--)
            {
                array[j + 1] = array[j];
            }
            array[j + 1] = temp;
        }
    
    }
    int main()
    {
        int array[8] = {4,2,7,9,3,10,6,11};
     //popupSort1(array,8);
    //  popupSort2(array,5);
      //  selectSort(array,8);
        insertion_sort(array, 8);
        int i;
        for(i = 0;i<8;i++)
        {
            printf("%d ",array[i]);
        }
    }

    4。快速排序

    通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

      时间复杂度:O(nlog2n)

      空间复杂度:O(nlog2n)

      优点:不稳定。

    int cmp(const void *a,const void *b)
    {
        return *(int *)a-*(int *)b;//这是从小到大排序,若是从大到小改成: return *(int *)b-*(int *)a;
    }
    int main()
    {
        int a[100];
        int n;
        scanf("%d",&n);//n代表数组中有几个数字
        int i;
        for(i=1;i<=n;i++)
            scanf("%d",&a[i-1]);
        qsort(a,n,sizeof(a[0]),cmp);//(数组,需要排序的数字个数,单个数字所占内存大小,比较函数)
         for(i=1;i<=n;i++)
            printf("%d ",a[i-1]);
        return 0;
    }

    5。堆排序

    6。归并排序

  • 相关阅读:
    C#:如何设置MDI窗体
    asp.net在类库中使用EF 6.0时的相关配置
    asp.net中使用jquery ajax保存富文本的问题
    Asp.net Api中使用OAuth2.0实现“客户端验证”
    NLog在asp.net中的使用
    元素的隐藏特性
    jQuery 使用笔记
    获取标签的所有选择器存放在一个数组
    自己绘制的flex布局思维导图
    js打印三角形
  • 原文地址:https://www.cnblogs.com/mcy0808/p/8710230.html
Copyright © 2011-2022 走看看