快排函数qsort()
最短的文字,最快的学习
头文件:stdlib.h
源码:
_CRTIMP __cdecl void qsort
(void *, size_t, size_t, int (*)(const void *, const void *) );
void * ->要排序的数组
size_t ->数组中的元素的个数
size_t ->数组中每个元素的大小(惯用sizeof())
int (*)(const void *, const void *) ->确定排序的顺序 (注意:传入的为地址!)
简单举例:
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a,const void *b){
return *(int *)b - *(int *)a; //从大到小
// return *(int*)a - *(int*)b; //从小到大
}
int main(){
int array[5]={4,3,5,1,2};
qsort(array,5,sizeof(array[0]),compare);
//输出
return 0;
}
到这里,qsort()函数的基本使用已经没有问题了,你就可以尽情的使用。如果对compare()函数的使用有疑惑,请继续看阅读。
除此之外,qsort()函数不仅仅可以对int型排序,还可以对double,char,struct,字符串数组进行排序,如果有需要,请继续阅读。
疑问:
- 快排原型
- compare函数原理
- 其他类型的运用
解答:
1.举例
#include <stdio.h>
void my_qsort(int *a, int left, int right) {
if (left > right) {
return; //排除错误
}
int temp = a[left];
int i = left;
int j = right;
int t;
while (i != j) {
while (i < j && a[j] >= temp) {
j--;
}
while (i < j && a[i] <= temp) {
i++;
}
if (i < j) {
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
my_qsort(a, left, i - 1);
my_qsort(a, i + 1, right);
}
main(){
int a[10]={6,4,6,1,2,5,2,8,9,0,};
my_qsort(a,0,9);
for(int i=0;i<10;i++){
printf("%d ",a[i]);
}
}
快排看不懂请看别的博主,本博主比较懒(有了qsort谁还要自己敲。。。)
2.compare原理
根据返回值决定顺序
< 0 a前b后
= 0 不变
> 0 b前a后
再深入理解就靠你自己了!!!
3.其他类型举例
持续更新中…敬请期待…
如果对你有帮助,点个赞不过分吧…
如果对你有帮助,点个赞不过分吧…
如果对你有帮助,点个赞不过分吧…
点赞才不会变懒!
点赞才不会变懒!
点赞才不会变懒!