在C语言的库函数中就有快速排序的库函数,即为qsort
2015-10-25 22:53
561 查看
在C语言的库函数中就有快速排序的库函数,即为qsort, 其用法如下:
功 能: 快速排序
头文件:stdlib.h
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参数:
1 待排序数组首元素的地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
示例程序如下:
[cpp]
view plaincopyprint?
#include <stdio.h>
#include <stdlib.h>
int compInc(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int compDec(const void *a, const void *b)
{
return *(int *)b - *(int *)a;
}
int main()
{
int a[5] = {11,2,13,4,7};
int b[5] = {11,2,13,4,7};
int len = 5;
int i;
printf("递增排序结果:\n");
qsort(a, len, sizeof(a[0]), compInc);
for(i = 0; i < len; i ++)
{
printf("%d ", a[i]);
}
printf("\n\n");
printf("递减排序结果:\n");
qsort(b, len, sizeof(b[0]), compDec);
for(i = 0; i < len; i ++)
{
printf("%d ", b[i]);
}
printf("\n");
return 0;
}
递增排序结果:
2 4 7 11 13
递减排序结果:
13 11 7 4 2
下面,继续看qsort的一些用法:
[cpp]
view plaincopyprint?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 12
#define N 20
int compareInc(const void *a, const void *b)
{
return strlen((char *)a) - strlen((char*)b);
}
int compareDec(const void *a, const void *b)
{
return strlen((char *)b) - strlen((char*)a);
}
int main(void)
{
int i;
char s[M]
=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
qsort(s, M, sizeof(char) * N, compareInc);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
printf("\n");
qsort(s, M, sizeof(char) * N, compareDec);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
return 0;
}
May
July
June
March
April
August
October
January
December
November
February
September
September
February
November
December
October
January
August
April
March
June
July
May
[cpp]
view plaincopyprint?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 12
#define N 20
int compare1(const void *a, const void *b)
{
return *(char *)a - *(char*)b;
}
int compare2(const void *a, const void *b)
{
return *(char *)b - *(char*)a;
}
int main(void)
{
int i;
char s[M]
=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
qsort(s, M, sizeof(char) * N, compare1);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
printf("\n");
qsort(s, M, sizeof(char) * N, compare2);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
return 0;
}
April
August
December
February
July
June
January
March
May
November
October
September
September
October
November
May
March
June
July
January
February
December
August
April
好,欣赏最后一个qsort程序:
[cpp]
view plaincopyprint?
#include <stdio.h>
#include <stdlib.h>
#define N 6
typedef struct
{
char name[15];
int score;
}Student;
int compare1(const void *a,const void *b)
{
return ((Student*)a)->score - ((Student*)b)->score;
}
int compare2(const void *a,const void *b)
{
return *(((Student*)a)->name) - *(((Student*)b)->name);
}
void print(Student s)
{
printf("%-15s : %d\n", s.name, s.score);
}
int main()
{
Student s
=
{
"Zhang San", 94,
"Li Si", 80,
"You", 94,
"I", 100,
"He", 72,
"She", 60
};
int i;
qsort(s, N, sizeof(Student), compare1);
for(i = 0; i < N; i++)
{
print(s[i]);
}
printf("\n");
qsort(s, N, sizeof(Student), compare2);
for(i = 0; i < N; i++)
{
print(s[i]);
}
return 0;
}
She : 60
He : 72
Li Si : 80
You : 94
Zhang San : 94
I : 100
He : 72
I : 100
Li Si : 80
She : 60
You : 94
Zhang San : 94
功 能: 快速排序
头文件:stdlib.h
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参数:
1 待排序数组首元素的地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
示例程序如下:
[cpp]
view plaincopyprint?
#include <stdio.h>
#include <stdlib.h>
int compInc(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int compDec(const void *a, const void *b)
{
return *(int *)b - *(int *)a;
}
int main()
{
int a[5] = {11,2,13,4,7};
int b[5] = {11,2,13,4,7};
int len = 5;
int i;
printf("递增排序结果:\n");
qsort(a, len, sizeof(a[0]), compInc);
for(i = 0; i < len; i ++)
{
printf("%d ", a[i]);
}
printf("\n\n");
printf("递减排序结果:\n");
qsort(b, len, sizeof(b[0]), compDec);
for(i = 0; i < len; i ++)
{
printf("%d ", b[i]);
}
printf("\n");
return 0;
}
#include <stdio.h> #include <stdlib.h> int compInc(const void *a, const void *b) { return *(int *)a - *(int *)b; } int compDec(const void *a, const void *b) { return *(int *)b - *(int *)a; } int main() { int a[5] = {11,2,13,4,7}; int b[5] = {11,2,13,4,7}; int len = 5; int i; printf("递增排序结果:\n"); qsort(a, len, sizeof(a[0]), compInc); for(i = 0; i < len; i ++) { printf("%d ", a[i]); } printf("\n\n"); printf("递减排序结果:\n"); qsort(b, len, sizeof(b[0]), compDec); for(i = 0; i < len; i ++) { printf("%d ", b[i]); } printf("\n"); return 0; }结果为:
递增排序结果:
2 4 7 11 13
递减排序结果:
13 11 7 4 2
下面,继续看qsort的一些用法:
[cpp]
view plaincopyprint?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 12
#define N 20
int compareInc(const void *a, const void *b)
{
return strlen((char *)a) - strlen((char*)b);
}
int compareDec(const void *a, const void *b)
{
return strlen((char *)b) - strlen((char*)a);
}
int main(void)
{
int i;
char s[M]
=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
qsort(s, M, sizeof(char) * N, compareInc);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
printf("\n");
qsort(s, M, sizeof(char) * N, compareDec);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
return 0;
}
#include <stdio.h> #include <stdlib.h> #include <string.h> #define M 12 #define N 20 int compareInc(const void *a, const void *b) { return strlen((char *)a) - strlen((char*)b); } int compareDec(const void *a, const void *b) { return strlen((char *)b) - strlen((char*)a); } int main(void) { int i; char s[M] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; qsort(s, M, sizeof(char) * N, compareInc); for(i = 0;i < M; i++) printf("%s\n", s[i]); printf("\n"); qsort(s, M, sizeof(char) * N, compareDec); for(i = 0;i < M; i++) printf("%s\n", s[i]); return 0; }结果为:
May
July
June
March
April
August
October
January
December
November
February
September
September
February
November
December
October
January
August
April
March
June
July
May
[cpp]
view plaincopyprint?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 12
#define N 20
int compare1(const void *a, const void *b)
{
return *(char *)a - *(char*)b;
}
int compare2(const void *a, const void *b)
{
return *(char *)b - *(char*)a;
}
int main(void)
{
int i;
char s[M]
=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
qsort(s, M, sizeof(char) * N, compare1);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
printf("\n");
qsort(s, M, sizeof(char) * N, compare2);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
return 0;
}
#include <stdio.h> #include <stdlib.h> #include <string.h> #define M 12 #define N 20 int compare1(const void *a, const void *b) { return *(char *)a - *(char*)b; } int compare2(const void *a, const void *b) { return *(char *)b - *(char*)a; } int main(void) { int i; char s[M] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; qsort(s, M, sizeof(char) * N, compare1); for(i = 0;i < M; i++) printf("%s\n", s[i]); printf("\n"); qsort(s, M, sizeof(char) * N, compare2); for(i = 0;i < M; i++) printf("%s\n", s[i]); return 0; }结果为:
April
August
December
February
July
June
January
March
May
November
October
September
September
October
November
May
March
June
July
January
February
December
August
April
好,欣赏最后一个qsort程序:
[cpp]
view plaincopyprint?
#include <stdio.h>
#include <stdlib.h>
#define N 6
typedef struct
{
char name[15];
int score;
}Student;
int compare1(const void *a,const void *b)
{
return ((Student*)a)->score - ((Student*)b)->score;
}
int compare2(const void *a,const void *b)
{
return *(((Student*)a)->name) - *(((Student*)b)->name);
}
void print(Student s)
{
printf("%-15s : %d\n", s.name, s.score);
}
int main()
{
Student s
=
{
"Zhang San", 94,
"Li Si", 80,
"You", 94,
"I", 100,
"He", 72,
"She", 60
};
int i;
qsort(s, N, sizeof(Student), compare1);
for(i = 0; i < N; i++)
{
print(s[i]);
}
printf("\n");
qsort(s, N, sizeof(Student), compare2);
for(i = 0; i < N; i++)
{
print(s[i]);
}
return 0;
}
#include <stdio.h> #include <stdlib.h> #define N 6 typedef struct { char name[15]; int score; }Student; int compare1(const void *a,const void *b) { return ((Student*)a)->score - ((Student*)b)->score; } int compare2(const void *a,const void *b) { return *(((Student*)a)->name) - *(((Student*)b)->name); } void print(Student s) { printf("%-15s : %d\n", s.name, s.score); } int main() { Student s = { "Zhang San", 94, "Li Si", 80, "You", 94, "I", 100, "He", 72, "She", 60 }; int i; qsort(s, N, sizeof(Student), compare1); for(i = 0; i < N; i++) { print(s[i]); } printf("\n"); qsort(s, N, sizeof(Student), compare2); for(i = 0; i < N; i++) { print(s[i]); } return 0; }结果为:
She : 60
He : 72
Li Si : 80
You : 94
Zhang San : 94
I : 100
He : 72
I : 100
Li Si : 80
She : 60
You : 94
Zhang San : 94
相关文章推荐
- 日志库EasyLogging++学习系列(2)—— 日志级别
- c语言学习收获
- 通用线程池的设计和实现[C语言]
- C++中的const
- 水仙花数
- C语言三种循环用法和区别
- ——黑马程序员——C语言基础--printf函数和scanf函数
- 学习笔记-简单模板链表类的C++实现 15/10/25
- 输出* *** *****....图形
- C++ 上溢和下溢(overflow underflow)
- C++静态计算的例子
- 黑马程序员——OC语言日志——NSMutableString和NSMutableArray 的介绍及使用
- C语言打印指针(地址)的值
- C语言实现小游戏(一)
- C++利用栈进行十进制与二进制的转换
- C++ sort()函数一些简单的用法
- Debug和Release区别
- C++继承:公有,私有和保护
- 函数应用:打印图形
- c++ primer第五版(中文)习题答案 第二章第一节-基本内置类型