qsort及其用法

來源:互聯網
上載者:User
qsort及其用法一、 函數原型voidqsort(void*base, size_t num, size_t width, int (__cdecl *compare )(constvoid*elem1, constvoid*elem2));大概的意思是,第一個參數指明了要排序的數組(比如:程式中的num),第二個參數給出了數組的大小(qsort沒有足夠的智力預知你傳給它的數組的實際大小),第三個參數給出了數組中每個元素以位元組為單位的大小。最後那個長長的傢伙,給出了排序時比較元素的方式..再給一個例子:inta[n];qsort(a,n,sizeof(int),comp);//從小到大排序intcomp(constvoid*a,constvoid*b){int*x=(int*)a;int*y=(int*)b;return*x-*y; //如果a>b返回正數,如果a<b,返回負數,相等返回0;}二、 qsort用法1、對int類型數組排序intnum[100];Sample:intcmp(constvoid*a,constvoid*b){return*(int*)a-*(int*)b;}qsort(num,100,sizeof(num[0]),cmp);2、對char類型數組排序(同int類型)charword[100];Sample:intcmp(const void*a,constvoid*b){2return*(char*)a-*(int*)b;}qsort(word,100,sizeof(word[0]),cmp);3、對double類型數組排序(特別要注意)doublein[100];intcmp(const void*a,constvoid*b){return*(double*)a>*(double*)b?1:-1;}qsort(in,100,sizeof(in[0]),cmp);4、對結構體一級排序structIn{doubledata;intother;}s[100]//按照data的值從小到大將結構體排序,關於結構體內的排序關鍵資料data的類型可以很多種,參考上面的例子寫intcmp(const void*a,constvoid*b){return(*(In*)a)->data>(*(In*)b)->data?1:-1;}qsort(s,100,sizeof(s[0]),cmp);5、對結構體二級排序structIn{intx;inty;}s[100];//按照x從小到大排序,當x相等時按照y從大到小排序intcmp(const void*a,constvoid*b)3{structIn*c=(In*)a;structIn*d=(In*)b;if(c->x!=d->x)returnc->x-d->x;elsereturnd->y-c->y;}qsort(s,100,sizeof(s[0]),cmp);6、對字串進行排序structIn{intdata;charstr[100];}s[100];//按照結構體中字串str的字典順序排序intcmp(constvoid*a,constvoid*b){returnstrcmp((*(In*)a)->str, (*(In*)b)->str);}qsort(s,100,sizeof(s[0]),cmp);自己寫一個純字串的:(temp是二維的字串數組,j是一共需排序的字串個數)intcmpstr(constvoid*a,constvoid*b){returnstrcmp((char*)a,(char*)b);}qsort(temp,j,sizeof(temp[0]),cmpstr);7、計算幾何中求凸包的cmpintcmp(constvoid*a,constvoid*b)//重點cmp函數,把除了1點外的所有點,旋轉角度排序{4structpoint*c=(point*)a;structpoint*d=(point*)b;if(calc(*c,*d,p[1])<0)return1;else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) <dis(d->x,d->y,p[1].x,p[1].y))//如果在一條直線上,則把遠的放在前面return1;elsereturn-1;}qsort()是c程式庫stdlib.h中的一個函數,需要比較函數完成排序;sort()是STL中的標準演算法。#include<stdlib.h>intcmp(constvoid*a,constvoid*b){return*((int*)b)-*((int*)a);}...qsort(q,n,sizeof(int),cmp);...}qsort對一維數組和字串數組的排序:#include"stdio.h"#include"stdlib.h"inta[100];intcmp(constvoid*p,constvoid*q){return(*(int*)p)-*((int*)q);}intmain(){int n;scanf("%d",&n);5for(int i=0;i<n;i++)scanf("%d",&a[i]);qsort((void*)a,n,sizeof(a[0]),cmp);for(int i=0;i<n;i++)printf("%d\n",a[i]);//while(1);intcmp(constvoid*p,constvoid*q){returnstrcmp((char*)p,(char*)q);}intmain()return0;}#include"stdio.h"#include"stdlib.h"#include"string.h"chara[20005][25];{int n,m,i,j;while(1){scanf("%d%d",&n,&m);if(n==0&&m==0)break;for(i=0;i<n;i++){scanf("%s",a[i]);}qsort((void*)a,n,sizeof(a[0]),cmp);for(i=0;i<n;i++)printf("%s\n",a[i]);}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.