快速排序模版

一、qsort函数快排:

(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数外部就不会出现此情况。




 
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bokzmm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值