天天看點

sqort用法總結 hnust_xiehonghao

/*#include<stdio.h> //對int 型的資料進行從小到大排序
#include<stdlib.h>
int haha(const void *a,const void *b) //a b 是void 空指針 可以指向任意類型資料 const是定義不變的資料 不改變的資料
{return *(int *)a-*(int *)b;} // 現在a,b進行強制性轉換 比較大小得出傳回值
main()
{
int a[100],i;
for(i=0;i<100;i++)
{
a[i]=100-i; } qsort(a,100,sizeof(a[0]),haha);
for(i=0;i<100;i++)
printf("%d\n",a[i]); }*/ /*888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*/ /*#include<stdio.h> //對int 型的資料進行從小到大排序
#include<stdlib.h>
int haha(const void *a,const void *b )
{
return *(int*)b-*(int*)a;
}
main()
{
int a[100],i;
for(i=0;i<100;i++)
a[i]=i;

qsort(a,50,sizeof(a[0]),haha);//對前50位從大到小排序
for(i=0;i<100;i++)
printf("%d\n",a[i]);

}*/
/*88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*/ /*#include <stdio.h> //對字元型進行排序 從小到大排序
#include<stdlib.h>
int haha(const void *a,const void *b)
{
return *(char*)a-*(char*)b;
}
int main(void)
{
char a[5];
int i;
printf("請輸入4個字母:");
gets(a);
qsort(a,4,sizeof a[0],haha);
puts(a);
}
*/
/*88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*/
/*
/*在對浮點或者double型的一定要用三目運算符,
因為如果也使用整型那樣的想減的話,如果是兩個很接近的數則可能傳回一個小數(大于-1,小于1)
,而cmp的傳回值是int型,是以會将這個小數傳回0,系統認為是相等,失去了本來存在的大小關系
下面的雖然結果對 但是當出現上面的情況的時候就不對了 啊 正确的看下一樓
*/ /* //對浮點型 的從小到大排序
#include <stdlib.h>
#include <stdio.h>
int love(const void *a,const void *b)
{
return *(float*)a-*(float*)b;
}
main()
{
float a[100];
int i;
float b=0.33;
for(i=0;i<100;i++)
a[i]=100-i+b;
qsort(a,100,sizeof a[0],love); for(i=0;i<100;i++)
printf("%f\n",a[i]);
} /*88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*/ 
/*#include <stdlib.h> //正确的浮點型從小到大的排序
#include <stdio.h>
int love(const void *a,const void *b)
{
return *(float*)a>*(float*)b?1:-1;
}
main()
{
float a[100];
int i;
float b=0.33;
for(i=0;i<100;i++)
a[i]=100-i+b;
qsort(a,100,sizeof a[0],love);





for(i=0;i<100;i++)
printf("%f\n",a[i]);
}
*/ /*88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*/
/*
#include <stdio.h>        //結構體一級排序 從小到大 不了解一級二級 下樓有個二級的 對比下就明白了
#include <stdlib.h>  
struct shabi
{
 int x;
 
}str[3];  
int love(const void *a,const void *b)
{
 return (*(struct shabi* )a).x-(*(struct shabi*)b).x;//注意struct shabi  struct 不能少  少了就不對了啊
}
main()
{
 int k;
 str[0].x=10;
 str[1].x=5;
 str[2].x=3;
 qsort(str,3,sizeof(struct shabi),love);    //注意sizeof啊 大小是一個一個結構體  大小也可以用str[0]表示  sizeof後的括号不加也行
 for(k=0;k<3;k++)
 {
   printf("x%d=%d\n",k,str[k].x);
 }
}
*/ /*88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*/
/*
//結構體2級排序 也就是2種排序結合法
//本例中按x将結構體從小到大排序若x相等則按y從大到小得順序将結構體排序
//按照x從小到大排序,當x相等時按照y從大到小排序 排得是結構體
#include <stdio.h>        
#include <stdlib.h>  //結構體2級排序 也就是2種排序結合法
struct shabi
{
int x,y;   }str[3];  
  int love(const void *a,const void *b)
  {
  if(((struct shabi* )a)->x==((struct shabi*)b)->x)  //這裡可以用- 》不過此時要去掉*,就是指(struct shabi* )a不能加*  因為不加*就相當于指針了 可以那樣指
   return  (*(struct shabi*)b).y-(*(struct shabi* )a).y;     //而這裡加了*号 不是指針 就必須用.來表示 
   else return (*(struct shabi* )a).x-(*(struct shabi*)b).x;
   }
   main()
   {
   int k;
   str[0].x=10;
   str[1].x=3;
   str[2].x=3;
   str[0].y=1;
   str[1].y=2;
   str[2].y=8;
   qsort(str,3,sizeof(struct shabi),love);    //注意sizeof啊 大小是一個一個結構體  大小也可以用str[0]表示  sizeof後的括号不加也行
   for(k=0;k<3;k++)
   {
   printf("x%d=%d,y%d=%d\n",k,str[k].x,k,str[k].y);
   }
}
*/ 
/*88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*/ //最後一樓了  房子快蓋好了 呵呵  激動ING 呵呵
/*     
按照字元串大小對結構體進行排序   struct In 
  { 
  int data; 
  char str[100]; 
  }s[100]; 
  
 //按照結構體中字元串str的字典順序排序 
 
    int cmp ( const void *a , const void *b ) 
    { 
    return strcmp( (*(In *)a)->str , (*(In *)b)->str ); 
    } 
    
   qsort(s,100,sizeof(s[0]),cmp); 
      這裡我就不詳細介紹了  大家舉一反三吧      上面的例子已經說的很清楚了 
*/