怎么用快速排序法比较结构体数组中成员中字符串的大小?比如有一个结构体数组,里面有 char s[1

怎么用快速排序法比较结构体数组中成员中字符串的大小?比如有一个结构体数组,里面有chars[10],我要以结构体中s字符串的大小为依据排序,怎么用C语言写完整的源代码?... 怎么用快速排序法比较结构体数组中成员中字符串的大小?比如有一个结构体数组,里面有
char s[10],我要以结构体中s字符串的大小为依据排序,怎么用C语言写完整的源代码?
展开
 我来答
晓之蒂
推荐于2017-09-07 · TA获得超过190个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:115万
展开全部
#include <stdio.h>
#include <string.h>
struct A{
char s[10];
int no;
};
int main(){
struct A a[5]={"asd",1,"qwe",2,"zxc",3,"rty",4,"vbn",5};
struct A *p[5]={&a[0],&a[1],&a[2],&a[3],&a[4]},*t;
for(int i=1;i<5;i++){
    t=p[i];
for(int j=i-1;j>=0;j--)
if(strcmp(t->s,p[j]->s)<0){
p[j+1]=p[j];
p[j]=t;
}
}
for(i=0;i<5;i++)
printf("%d ",p[i]->no);
printf("\n");
}

这个程序只是用结构体A做了个排序的例子,至于你要结构体中有我不知道,你自己加吧。

我就加了个no,让你看看结果而已。

追问
这不是快速排序啊
追答
#include <stdio.h>
#include <string.h>
struct A{
    char s[10];
    int no;
};
void quicksort(struct A**v,int left,int right){
if(left<right){
struct A*key=v[left];
int low=left;
int high=right;
while(low<high){
while(low<high && strcmp(v[high]->s,key->s)>0)
high--;
v[low]=v[high];
while(low<high && strcmp(v[low]->s,key->s)<0)
low++;
v[high]=v[low];
}
v[low]=key;
quicksort(v,left,low-1);
quicksort(v,low+1,right);
}
}
int main(){
    struct A a[7]={"asd",1,"qwe",2,"zxc",3,"rty",4,"vbn",5,"osd",6,"val",7};
    struct A *p[7],*t;
for(int i=0;i<7;i++)
p[i]=&a[i];
quicksort(p,0,6);
    for(i=0;i<7;i++)
        printf("%d ",p[i]->no);
    printf("\n");
return 0;
}

快排

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式