c语言冒泡排序法例子

我们都很清楚冒泡排序,光冒泡排序我已经讲了好几节,就是给定一组数据,这组数据两两比较大小,然后交换位置,最终将结果按从小到大排序。

c语言冒泡排序法例子_http://www.zhaochafa.com_信息发布_第1张

那么今天这道题目呢,正如标题所说:将冒泡排序用于字符串,给定任意的整数K和N,打印输出扫描第K遍后的中间结果数列,K要满足大于等于1,小于N,N要满足小于等于100,此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

梳理逻辑

1、输入整数N和K,用到一个scanf函数。

2、因为要用于字符串序列,而且是不停地输入字符串,所以我们可以使用二维数组来存储字符串,为什么使用二维数组呢,因为二维数组有多行,这里正好要输入N个字符串,所以二维数组也能存储多个字符串,而且它要求每行包含一个长度不超过10的,且仅由小写字母组成的非空字符串。

至于长度不超过10,只需要用一个二维数组满足列为11即可,这样就能保证长度不超过10,而仅由小写字母组成的话,需要用到一个#include<ctype.h>库当中的islower函数,当islower函数等于零的时候,就说明该字符串中有大写字母,要重新输入。

for(int i=0; i < N;i ){
if(islower(bubble[i]==0)){//如果字符串中有大写字母,就重新输入
scanf("%s",bubble[i]);
}
}

3、最关键的就是比较字符串大小,比较字符串大小该如何来理解呢,我在做这道题目的时候,我一开始理解错了,以为比较字符串大小是比较字符串的长度多少,结果在验证之后发现,得不到题目期望的结果,于是我开始考虑。

之后发现,C语言中有一个strcmp函数,是专门用来比较字符串大小的,如果第一个字符串和第二个字符串大小相同,则返回零,如果第一个字符串比第二个字符串小,则返回小于零,如果第一个字符串比第二个字符串大,则返回大于零。

4、除了用到strcmp函数外,我们还要用到另一个函数来交换两个字符串之间的位置,当然,这里与数字的冒泡排序相同,自然是要定义一个临时变量来存储字符串的,用到的复制函数则是strcpy,能够把第二个字符串的内容给复制到第一个字符串当中,然后覆盖第一个字符串中的所有内容。

5、打印输出要换行,自然还是用到一个计数法。

代码实现

//字符串的冒泡排序
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main(){
int N;//N个整数
int K;//扫描K遍
scanf("%d %d", &N,&K);//第一行给出N和K
char bubble[10][100];
char Temp[100];//Temporary Variable,一个临时变量来存储元素
int count = 0;//计数法
if(K>=N){
scanf("%d %d", &N,&K);//第一行给出N和K
}
if(N>100){
scanf("%d %d", &N,&K);//第一行给出N和K
}
if(K<1){
scanf("%d %d", &N,&K);//第一行给出N和K
}
for(int i=0; i < N;i ){
scanf("%s",bubble[i]);
}
for(int i=0; i < N;i ){
if(islower(bubble[i]==0)){//如果字符串中有大写字母,就重新输入
scanf("%s",bubble[i]);
}
}
for(int j = 0; j < K; j ){
for(int i = 0; i < N-1; i ){
if(strcmp(bubble[i],bubble[i 1])>0){//比较前一个字符串和后一个字符串的大小
strcpy(Temp, bubble[i 1]);
strcpy(bubble[i 1], bubble[i]);
strcpy(bubble[i], Temp);//交换位置
}
}
}
for(int q = 0; q < N;q ){//打印输出最终结果
if(count!=0){
printf("/n");
}
printf("%s", bubble[q]);
count ;
}
}

结果测试

总结

这两天的内容都是围绕字符串的函数来讲的,关键还是C语言当中的有些特定库函数要熟悉,熟悉之后解决题目也会比较方便。

发表回复