qsort函数
来源:互联网 发布:最权威的大数据书籍 编辑:程序博客网 时间:2024/06/06 10:59
个人感觉qsort是个比较强大的排序函数,可以排int,char,double,等等,几乎都可以排序,
1. int型排序
再c++中,int是最简单的所以它的排序也是最简单的,
程序代码:#include <iostream>
using namespace std ;
int compare(const void *, const void *);
int main()
{
int array[10]={5,3,5,7,4,8,9,19,30,34};
cout << "The original array is:/n";
for (int i=0;i<10;i++)
cout << array[i] << " ";
cout << endl;
qsort(array,10,sizeof(array[0]),compare);
cout << "After sort, now the array is:/n";
for (int i=0;i<10;i++)
cout << array[i] << " ";
cout << endl;
system("pause");
return 0;
}
int compare(const void *num1, const void *num2)
{
return *(int *)num1 - *(int *)num2;
}
2.char型
程序代码:
#include <iostream>
using namespace std ;
int compare(const void *, const void *);
int main()
{
char string[10]="jsnanjing";
cout << "The original string is:/n";
for (int i=0;i<10;i++)
cout << string[i] << " ";
cout << endl;
qsort(string,10,sizeof(string[0]),compare);
cout << "After sort, now the string is:/n";
for (int i=0;i<10;i++)
cout << string[i] << " ";
cout << endl;
system("pause");
return 0;
}
int compare(const void *num1, const void *num2)
{
return *(char *)num1 - *(char *)num2;
}
3.double型
程序代码:
#include <iostream>
using namespace std ;
int compare(const void *, const void *);
int main()
{
double array[10]={2.2,1.3,4.3,5.6,6.6,4.5,9.6,5.5,4.6};
cout << "The original array is:/n";
for (int i=0;i<10;i++)
cout << array[i] << " ";
cout << endl;
qsort(array,10,sizeof(array[0]),compare);
cout << "After sort, now the array is:/n";
for (int i=0;i<10;i++)
cout << array[i] << " ";
cout << endl;
system("pause");
return 0;
}
int compare(const void *num1, const void *num2)
{
return (*(double *)num1 - *(double *)num2)>0?1:-1;
}//因为当两个double型的数整数部分相等时,compare函数会返回0,表示这两个数相等,所以我们要这样写来避免这个问题
4.对字符串进行排序
程序代码:
#include <iostream>
#include <cmath>
using namespace std ;
int compare(const void *, const void *);
int main()
{
char string[3][10]={"southeast","jsnanjing","jiangning"};
cout << "The original string is:/n";
for (int i=0;i<3;i++)
cout << string[i] << " ";
cout << endl;
qsort(string,3,sizeof(string[0]),compare);
cout << "After sort, now the string is:/n";
for (int i=0;i<3;i++)
cout << string[i] << " ";
cout << endl;
system("pause");
return 0;
}
int compare(const void *num1, const void *num2)
{
return strcmp((char *)num1 ,(char *)num2);
}//此时的compare中有较大的变化,应当注意,因为strcmp函数的参数就是指针,所以只要转化为char型指针就可以了
5.对结构体的排序,
#include <iostream>
#include <cmath>
using namespace std ;
int compare(const void *, const void *);
struct Student
{
int StudentID;
int Grade;
};
int main()
{
Student student[3]={15,87,16,95,20,87};
cout << "The original student is:/n";
for (int i=0;i<3;i++)
cout << student[i].StudentID << " " << student[i].Grade << endl;
cout << endl;
qsort(student,3,sizeof(student[0]),compare);
cout << "After sort, now the student is:/n";
for (int i=0;i<3;i++)
cout << student[i].StudentID << " " << student[i].Grade << endl;
cout << endl;
system("pause");
return 0;
}
int compare(const void *num1, const void *num2)
{
Student *stu1=(Student *)num1;
Student *stu2=(Student *)num2;
if(stu1->Grade != stu2->Grade)
return stu1->Grade - stu2->Grade;
else
return stu1->StudentID - stu2->StudentID;
}
显然我们要注意double型的,和字符串的排序时compare函数的写法,double型要注意相等的判断,字符串就是要注意字符大小比较函数strcmp的用发即可。
- qsort ()函数
- qsort函数
- qsort函数
- qsort函数
- qsort()函数
- qsort函数
- qsort函数
- qsort函数
- qsort函数
- qsort函数
- Qsort()函数
- qsort函数
- qsort()函数
- qsort()函数
- qsort()函数
- qsort函数
- qsort函数、sort函数
- qsort函数、sort函数
- 修改Win32 Service配置信息(包括SCM描述信息)
- android编译全过程
- VS2010创建第一个C程序
- 1.9 函数-C++编程模块
- uuuuu
- qsort函数
- 学而
- Excel数据处理
- 在Windows 7下使用Mobile 设备中心与A702连接
- stlPort+boost的编译方法
- unix环境下标准C实现的遍历某个文件夹下面所有文件(转自CSDN)
- 比较时间
- 利用“共用体”(union)判断机器大小端
- (转贴)SQL 左外连接,右外连接,全连接,内连接