• 基础算法之排序查找算法


    排序是计算机中重要的操作之一,接下来列举一下所有学到过的排序和查找,并将他们比较一下

        排序包括稳定的排序和不稳定的排序

    插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的

    选择排序、希尔排序、快速排序、堆排序是不稳定的

    这里还有一些关于排序的东西稍后会补上

    常用的算法比如qsort函数

    3-1 对一维数组进行排序

    int comp(const void *a,const void *b)
    {
    return *(int *)a-*(int *)b;   //从小到大进行排序   return *(int *)b-*(int *)a; 为由大到小排序。
    }

    qsort(a,1000,sizeof(int),comp);

    3-2对二维数组进行排序

    是对一个二维数组的进行排序:
    int a[1000][2]; 其中按照a[0]的大小进行一个整体的排序,其中a[1]必须和a[0]一起移动交换。
    qsort(a,1000,sizeof(int)*2,comp);
    int comp(const void *a,const void *b)
    {
    return ((int *)a)[0]-((int *)b)[0];
    }
     
    3-3对结构体进行排序

    对结构体排序

    char a[1000][20];
    qsort(a,1000,sizeof(char)*20,comp);
    int comp(const void *a,const void *b)
    {
    return strcmp((char *)a,(char *)b);
    }
    对一个结构体进行排序:
    typedef struct str
    {
    char str1[11];
    char str2[11];
    }str,*stri;
    str strin[100001]=;
    int compare(const void *a,const void *b)
    {
    return strcmp(((str*)a)->str2,((str*)b)->str2);
    }
    qsort(strin,total,sizeof(str),compare);
     
    3-4对double类型数据进行排序
    #include <stdio.h>
    #include <stdlib.h>
    double s[1000];
    int i,n;
    int cmp(const void * a,const void * b)
    {
    return((*(double*)a-*(double*)b>0)?1:-1);
    }
    int main()
    {
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%lf",&s[i]);
    qsort(s,n,sizeof(s[0]),cmp);
    for(i=0;i<n;i++)
    printf("%lf ",s[i]);
    return(0);
    }
  • 相关阅读:
    div嵌套盒子模型
    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver的问题
    java用class.getClassLoader().getResourceAsStream方式读取properties文件路径问题
    JDBC学习链接----非常好的视频
    数据库用户权限管理
    MySQL 数据备份与还原
    存储过程--触发器和事件
    Mysql常用函数
    Mysql使用终端操作数据库
    python网络-动态Web服务器案例(30)
  • 原文地址:https://www.cnblogs.com/OneDream/p/3000844.html
Copyright © 2020-2023  润新知