1、用qsort必须先包含<iostream>或者<stdlib>
(1)使用模型
以下是对10个整形数从小到大排序的实例
view plaincopy to clipboardprint?#include <iostream> using namespace std; int cmp( const void *a, const void *b ) { int *c = (int *)a; int *d = (int *)b; return *c - *d; } int main() { int i, a[10]={10,9,8,7,6,5,4,3,2,1}; qsort(a, 10, sizeof(a[0]), cmp); for( i=0; i<10; ++i ) cout <<a[i] <<" "; return 0; }
说明:cmp函数中return *c - *d 改为return *d - *c,则qsort功能变为对10个数从大到小排序,所以cmp指示qsort以怎样的方式排序,qsort的第一个实参是第一个要排序的数的地址,第二个实参是要排序的数组的个数,第三个实参是要排序的数组的类型的字节数,所以a[0]也可以改为int。
(2)对多关键字段排序
先对字符串x从小到大排序,当字符串相同时,再按y从小到大排序,注意和对int排序时的不同点。
view plaincopy to clipboardprint?#include <iostream> #include <cstring> #include <cmath> using namespace std; struct PN { char x[10]; double y; }q[100]; int cmp( const void *a, const void *b ) { PN *c = (PN *)a; PN *d = (PN *)b; if( strcmp(c->x,d->x)!=0 ) return strcmp(c->x,d->x); return c->y > d->y ? 1 : -1; /*注意与int比较的不同*/ } qsort(q,100,sizeof(q[0]),cmp); 高级应用:我们都知到快速排序是不稳定的,但通过把原数据和它的位置标号组成结构体,再进行多关键字段排序即可实现快速的稳定排序。
2、用sort必须先包含<algorithm>
(1)使用模型
以下是对10个整形数组从小到大排序的实例
view plaincopy to clipboardprint?#include <iostream> #include <algorithm> using namespace std; bool cmp( const int& a, const int& b ) { if( a < b ) return true; return false; } int main() { int i, a[10]={10,9,8,7,6,5,4,3,2,1}; sort(a,a+10,cmp); for( i=0; i<10; ++i ) cout <<a[i] <<" "; return 0; }
对多关键字的排序和qsort类似,就省了。据说sort比qsort要快点。
3、标准快速排序代码int partition( int *num, int left, int right ) { int i, j, temp; i = left; j = right; temp = num[left]; while( i < j ) { while( i<j && temp<=num[j] ) j--; if( i < j ) { num[i] = num[j]; i++; } while( i<j && temp>=num[i] ) i++; if( i < j ) { num[j] = num[i]; j--; } } num[j] = temp; return j; } void quicksort (int *num, int left, int right ) { if( left < right ) { int t = partition(num,left,right); quicksort(num,left,t-1); quicksort(num,t+1,right); } }
本文来自博客,转载请标明出处:http://blog.csdn.net/afreesoul/archive/2008/12/27/3618428.aspx