zoukankan      html  css  js  c++  java
  • 高效排序法

    在stdlib.h里 
    qsort(a, n, sizoef(int), cmp) ;
    这样一句就排好了
    第一个参数是需要排序的指针,一般为数组类型,我们这儿传进去的是e; 第二个参数是进行排序的元素个数,由于我们只初始化了10个,所以传10; 第三个参数是每个元素的大小,所以我们传进去sizeof(expo); 第四个参数是比较的逻辑,是一个函数指针,我们传进去修改后的cmp;

    # include <stdio.h>
    # include <stdlib.h>


    int cmp1(const void *a, const void *b)
    {
    int aa = *(int*)a , bb = *(int*)b ;
    return aa - bb ;
    }


    int cmp2(const void *a, const void *b)
    {
    int aa = *(int*)a , bb = *(int*)b ;
    if (aa < 0) aa = -aa ;
    if (bb < 0) bb = -bb ;
    return aa - bb ;
    }


    int main ()
    {
    int a[5] = {1, 2, -1, -2, 0} ;
    int i ;


    qsort (a, 5, sizeof(int), cmp1) ;
    for (i = 0 ; i < 5 ; i++)
    printf ("M", a[i]) ;
    printf ("\n") ;

    qsort (a, 5, sizeof(int), cmp2) ;
    for (i = 0 ; i < 5 ; i++)
    printf ("M", a[i]) ;
    printf ("\n") ;

    return 0 ;
    }


    除了 return aa - bb ;

    其他都是固定写法
    不用管为什么
    aa是
    aa是a元素的值 bb是b元素的值
    我返回的是aa - bb
    是什么意思呢



    如果aa < bb 返回的是一个负数
    如果aa == bb 返回的是0
    如果aa > bb 返回的是一个正数
    这就是比较函数的意思
    比较函数cmp用于返回两个元素的大小关系

    如果第一个元素小于第二个元素 返回负数
    如果两个元素相同 返回0
    如果第一个元素大于第二个元素 返回正数

    但是。。。也没体现降序排列啊

    如果你想反过来
    你就返回bb-aa啊
  • 相关阅读:
    sqlserver 把两个sql查询语句查询出来的两张表合并成一张表
    highcharts series几种写法
    Collection、 List 、Set接口 LinkedList 、HashSet类, Collections 集合工具类
    java.io.File
    Object、Objects
    java.lang.StringBuilder
    String
    java学习日记(17-18)
    java学习日记(14-16)
    java学习日记(8-13)
  • 原文地址:https://www.cnblogs.com/chaosheng/p/2329607.html
Copyright © 2011-2022 走看看