一、qsort函数快排:
(1)整型
当在main函数内部定义一个特别大的数组时;常会由于堆栈溢出而是程序无法运行;
那么,解决的办法就是将该数组定义在main数外部就不会出现此情况。
(1)整形:
#include<stdio.h>
#include<stdlib.h>
int cmp(constvoid *a,constvoid *b)
{ return(*(int*)a-*(int*)b); }
int main()
{
int a[100]
.........
..........
qsort(a,m,sizeof(a[0]),cmp);//a为数组的第一个元素,m为其元素的个数
}
这样就可以将一组整数按从小到大的顺序排列,如果想降序排列只需把cmp函数中的return改为
return(*(int*)b-*(int*)a);就可以实现降序排列。
(2)double型(浮点型)
#include<stdio.h>
#include<stdlib.h>
int cmp(constvoid *a,constvoid *b)
{ if(*(double*)a>*(double*)b)
return 1;
else
return -1;
}
int main(()
{
double a[100]
..........
.................
qsort(a,m,sizeof(a[0]),cmp);//同上
}
同样,这样仍是升序排列,若想降序排列。就需把IF语句中的“>”改为“<”即可。
(3)字符型
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(constvoid *a,constvoid *b)
{
return strcmp((char*)b , (char*)a);
}
int main()
{
char a[100];
.................
...............
qsort(a,m,sizeof(a[0]),cmp);
...............
}这样的是降序排列,如果想降序,那么只需将cmp函数中的a,b交换位置即可
(4)结构体(文件扩展名为.cpp)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
int u,w;
double v;
char str[1010];
}b[1010];
int cmp(constvoid *a,constvoid *b)
{
//return strcmp((*(node *)a).str,(*(node *)b).str);
if((*(node *)a).u==(*(node *)b).u)
return (*(node *)b).w-(*(node *)a).w;
return (*(node *)a).u-(*(node *)b).u;
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i
{
scanf("%d %d",&b[i].u,&b[i].w);
}
qsort(b,n,sizeof(b[0]),cmp);
................
............
}
二sort排序(文件扩展名后缀为.cpp)
(1)整型
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int cmp(int a, int b){
return a > b;
}
int main ()
{
int n;
int a[10];
scanf("%d",&n);
for(int i = 0; i < n; ++i)
scanf("%d", &a[i]);
sort(a , a + n,cmp);
.............
.............
}
((2)double型
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main ()
{
int n;
double a[10];
scanf("%d",&n);
for(int i = 0; i < n; ++i)
scanf("%lf", &a[i]);
sort(a , a + n);
for(int i = 0; i < n; ++i)
printf("%lf ", a[i]);
return 0;
}
(3)字符型
#include<cstdio>
#include <cstring>
#include<algorithm>
using namespace std;
int cmp(char a, char b){
return a > b;
}
int main (){
//int n;
//scanf("%d", &n);
char a[10];
scanf("%s", a);
sort(a, a + 3,cmp);
printf("%s\n", a);
return 0;
}
三、数组堆栈溢出
当在main函数内部定义一个特别大的数组时;常会由于堆栈溢出而是程序无法运行;
那么,解决的办法就是将该数组定义在main数外部就不会出现此情况。