【C语言】冒泡排序可以排序多个字符串

【C语言】排序详解——冒泡排序 前言: 冒泡排序可以说是排序系列中最简单也最基础的一种排序的方式,尽管它十分的简单易懂,但依旧会有一些小问题是大家可能忽略的,因此我打算将不同排序分成单独的文章进行讲解,这样既不会显得臃肿,同时也可以讲得更加仔细,废话不多说,开干。 一.概念简述 从上图我们不难看出冒泡排序应该有两个循环:第一个循环是小循环,该循环的作用是——在某个数组内依次进行两个数的大小比较;第二个循环是大循环,改循环的作用是——决定小循环的次数 那么概括来说就是,在一定次数内,数组按照一定的大小顺序进行两两比较,满足顺 阅读详情

在实现多个字符串进行排序之前我们先来了解下冒泡排序:
算法原理:
每次对相邻的两个元素进行比较,若前者大于后者,那么我们就交换,如此这样一趟下来的话,最大的元素就被放在了最后面,重复以上的步骤后,就可以对元素进行排序。

void swap(int *a, int *b){
    int tmp = 0;
    tmp = *a;
    *a = *b;
    *b = tmp;
}
void bubble_sort(int arr[], int length){
    int i = 0;
    int j = 0;
    for (i = 0; i < length - 1; i++){
        for (j = 0; j < length - 1 - i; j++){
            if (arr[i]>arr[j + 1]){
                swap(&arr[i], &arr[j + 1]);
            }
        }
    }
}

算法进行的优化:

void swap(int *a, int *b)
{
    int temp = 0;
    temp = *a;
    *a = *b;
    *b = temp;
}
void bubble_sort2(int *arr, int length)
{
    int i = 0;
    int j = 0;
    int flag = 1;
    for (i = 0; i < length - 1; i++)
    {
        flag = 0;//每次先重置为0
        for (j = 0; j < length - 1 - i; j++)
        {
            if (arr[j]>arr[j + 1])
            {
                 swap(&arr[j], &arr[j + 1]);
                 flag = 1;
            }
        }
        if (!flag)
             break;
    }
}

优化原理:
如上面的代码,里面的一层循环在某次扫描中若没有交换则说明此时数组已经全部有序,无需再扫描了。因此,可以增加一个标记,每交换一次就进行标记,如果某次循环完没有标记,则说明已经完成排序了。

现在来说说如何用冒泡排序对多个符串进行排序:
算法原理:假设对3个字符串进行排序,每个字符串的字符数不超过10个,那么便可以把这三个字符串看成是个二维数组,如此一个指向一维数组的指针就可以访问该数组,然后在根据冒泡排序的原理便可对其排序。
算法实现:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>  
#include <string.h>  

void bubble_sort_str(char *str[], int sz)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < sz - 1; i++)
    {
        for (j = 0; j < sz - 1 - i; j++)
        {
            if (strcmp(*(str + j), *(str + j + 1))>0)
            {
                char *tmp = *(str + j);
                *(str + j) = *(str + j + 1);
                *(str + j + 1) = tmp;
            }
        }
    }
}
int main()
{
    int i = 0;
    char *str[] = { "cccc", "bbbb", "dddd", "aaaa" };
    bubble_sort_str(str, sizeof(str) / sizeof(*str));
    for (i = 0; i < sizeof(str) / sizeof(*str); i++)
    {
        printf("%s ", *(str + i));
    }
    printf("\n");
    system("pause");
    return 0;
}

与上面的这种方法稍微不同的一种方法:

#include<stdio.h>  
void bubble_sort_str(char *str[], int sz)  
{  
    int i = 0;  
    int j = 0;  
    int flag;  
    for (i = 0; i < sz - 1; i++)  
    {  
        flag = 0;  
        for (j = 0; j < sz - i - 1; j++)  
        {  
            if (strcmp(*(str + j), *(str + j + 1))>0)  
            {  
                flag = 1;  
                char *tmp = *(str + j);  
                *(str + j) = *(str + j + 1);  
                *(str + j + 1) = tmp;  
            }  
        }  
        if (flag == 0)  
        {  
            return 0;  
        }  
    }  
    return 0;  
}  
int main()  
{  
    char *str[] = { "aaaa", "cccc", "ffff", "dddd" };  
    bubble_sort_str(str, sizeof(str) / sizeof(str[0]));  
    int i = 0;  
    for (i = 0; i < sizeof(str) / sizeof(*str); i++)  
    {  
        printf("%s ", str[i]);  
    }  
    printf("\n");  
    system("pause");  
    return 0;  
}  
C语言-----冒泡排序多个字符串 题目: 写冒泡排序可以排序多个字符串 我们按照从大到小的顺序,应该想到用指针数组来存放字符串 void bubble_sort_str(char *arr[], int sz) { int i = 0; int j = 0; for (i = 0; i &lt; sz - 1; i++) { for (j = 0; j &lt; sz - i ... 阅读详情

相关推荐

【20230415】Ubuntu22.04双屏显示触屏设置,解决触摸点和响应位置不一致的问题

双屏显示时,如果存在一个触摸屏,有可能会出现触摸点和响应位置不一致的问题。我的显示器配置如下:一个34寸,3440*1440;一个22英寸触摸屏,1920*1080。

Creationyang的博客 3214

C语言:冒泡排序。

问题 冒泡排序(Bubble Sort),也称为沉降排序(Sinking Sort),之所以称其为冒泡排序,是因为算法中值相对较小的数据会像水中的气泡一样逐渐上升到数组的最顶端。与此同时,较大的数据逐渐地下沉到数组的底部。这个处理过程需在整个数组范围内反复执行多遍。每一遍执行时,比较相邻的两个元素。若顺序不对,则将其位置交换,当没有数据需要交换时,数据也就排好序了。 编程将排序函数DataSort...

耳东 3056

从ISCXTor2016到CICIDS2017:手把手教你下载和使用UNB的网络安全数据集

本文详细介绍了UNB大学发布的ISCXTor2016和CICIDS2017等网络安全数据集的下载与使用方法,特别适合加密流量识别和网络行为分析研究。文章提供了多种高效获取路径、文件结构解析及实战分析示例,帮助研究者快速上手这些真实场景捕获的精细标注数据集。

weixin_42524945的博客 630

字符串排序

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

qq_63066805的博客 993

【NTN 卫星通信】Starlink 星链卫星有多大?详解尺寸与技术参数

SpaceX的星链项目正在重塑全球互联网连接,尤其是在服务不足的地区。但星链卫星的实际尺寸有多大?

weixin_43603524的博客 1万+

matlab安装libsvm常见问题

matlab安装libsvm常见问题 libsvm的官网链接:LIBSVM -- A Library for Support Vector Machines.

cqujcy的博客 1535

C语言字符串排序(采用冒泡排序法)

#include<stdio.h> #include<stdlib.h> #include<string.h> #define StringMax 100//定义每个字符串的最大长度 void ShowArray(char arr[][StringMax],int n) { for(int i=0;i<n;i++){ printf("%s\n",...

weixin_44772948的博客 6743

Veeam Backup & ONE download

前言 Veeam® Availability Suite™ 是 Veeam 的旗舰解决方案,可实现简单、灵活和可靠的数据管理。消除与数据保护、恢复、监控、勒索软件防护和合规性相关的手动流程,从而减轻数据维护压力。Veeam 能够帮助您节省时间和成本,同时支持您减少在备份方面花费的时间,将更多精力放在推动业务发展上。 Veeam Availability Suite Release 版本 包含 发布时间 复制磁力链接使用迅雷或者bittorrent ...

极致,细节 1997

C语言:利用指针数组指向字符串,对多个字符串进行排序(冒泡排序法)

指针数组比较适合用来指向若干个字符串,使字符串处理起来更加灵活 例:将若干字符串按字母顺序(从小到大)输出 思路: 定义指针数组name,用各字符串对它进行初始化(即把各字符串中的第1个字符的地址赋给指针数组的各个元素) 使用选择法进行排序,不移动字符串,而是改变指针数组各个元素的指向 代码如下: //对字符串排序,(冒泡排序法) #include &lt...

zhanhwb的博客 8653

N5105核显直通PVE:从黑屏到HDMI输出的完整指南

PCI直通能让虚拟机独占物理设备,但核显直通远没有独显那么轻松。Intel核显与CPU、显示输出链路的强耦合使UEFI引导、GOP驱动、驱动签名等环节都成了黑屏陷阱。在PVE虚拟化环境中,通过IOMMU开启、vfio-pci绑定、OVMF固件和Q35机型配合,可以绕过KVM检测,让Windows虚拟机正确驱动核显,从HDMI口输出画面,并解锁Intel Quick Sync硬解能力。这种方案尤其适合N5105等低功耗迷你主机,可作为客厅HTPC、本地视频硬解或依赖硬件加速的轻量工作台。本文基于N5105平台

weixin_31082403的博客 374

【C语言】写冒泡排序可以排序多个字符串。

#include #include void bubble_sort_str(char *str[],int sz) { int i = 0; int j = 0; for (i = 0; i < sz - 1; i++) { for (j = 0; j < sz - 1 - i; j++) { if (strcmp(*(str + j), *(str + j + 1)

zgw285763054的博客 2046

备战2025数学建模国赛(算法29):博弈论在数学建模竞赛中的应用

博弈论为数学建模竞赛提供了强大的分析工具,尤其适用于涉及多方互动决策的问题。本文介绍了博弈论的核心模型、算法实现及竞赛应用案例,并提供了完整的Python代码实现。扩展阅读方向不完全信息博弈与贝叶斯均衡合作博弈与联盟形成机制设计与拍卖理论随机博弈与马尔可夫决策过程博弈论与机器学习的结合。

YOLO 442

c语言多个字符串排序,C语言:使用冒泡排序,排序多个字符串(优化)。

#define_CRT_SECURE_NO_WARNINGS1#include#include#includeintmain(){char*str[]={"hello","change","world","come","on"};//指针数组,每一个都是字符指针inti=0;intj=0;intflag;intsize=sizeof(str)/s...

weixin_36028243的博客 252

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

c语言用冒泡法把10个字符串排序,C语言:使用冒泡排序,排序多个字符串(优化)。...

#define_CRT_SECURE_NO_WARNINGS1#include#include#includeintmain(){char*str[]={"hello","change","world","come","on"};//指针数组,每一个都是字符指针inti=0;intj=0;intflag;intsize=sizeof(str)/s...

weixin_42518480的博客 1597

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C语言---冒泡排序排序多个字符串

strcmp函数 原型:extern int strcmp(const char *s1, const char * s2); 用法:#include 功能:比较字符串s1和s2。 一般形式:strcmp(字符串1,字符串2) 说明: 当s1 当s1 = s2时,返回值 = 0 当s1>s2时,返回值>0 即:两个字符串自左向右逐个字符相比(按A

ZoctopusD的博客 1373

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【C语言】写冒泡排序可以排序多个字符串

这道题是冒泡排序的简单延伸,代码如下:  #define _CRT_SECURE_NO_WARNINGS 1 #define _CRT_SECURE_NO_WARNINGS 1 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; void bubble_sort(char **a, int sz) {...

Miss_Monster的博客 757

C语言:写冒泡排序可以排序多个字符串。

此题的解决思路为:首先整体思路为冒泡排序法,其次它是要排序多个字符串,这里就要用到字符串的比较strcmp,通过判断比较两字符串然后再进行交换排序。 具体代码如下: #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;string.h&amp;gt; void bubble_str(char *arr[], int sz)...

ETalien_的博客 908

C语言:写冒泡排序可以排序多个字符串

题目:写冒泡排序可以排序多个字符串 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; bubble_sort(char** arr, int sz)//传参时传二级指针或者字符指针数组本身 {     int i = 0;     int j = 0;     for (i = 0; i ...

qq_42270373的博客 724

C语言冒泡排序怎么优化,C语言:使用冒泡排序,排序多个字符串(优化)。

#define_CRT_SECURE_NO_WARNINGS1#include#include#includeintmain(){char*str[]={"hello","change","world","come","on"};//指针数组,每一个都是字符指针inti=0;intj=0;intflag;intsize=sizeof(str)/s...

weixin_31577599的博客 123

C语言:使用冒泡排序,排序多个字符串(优化)。

#define_CRT_SECURE_NO_WARNINGS1 #include<stdio.h> #include<stdlib.h> #include<string.h> intmain() { char*str[]={"hello","change","world","come","on"}; //指针...

weixin_34217773的博客 372

.写冒泡排序可以排序多个字符串 C语言

#include <stdio.h> #include <windows.h> #include <string.h>#pragma warning(disable: 4996)void Exchange(char * str1, char *str2) { char str_e[10] = "0"; strcpy(str_e, str1); strcpy(str1, str

HiMark 382

c语言字符串字典序,字符串排序数组C语言 C语言 字符串数组字典排序

C语言 字符串数组字典排序#include #include int main() { int j,k,i,t,n; char s[10][10],b[10][10]; for(i=0;ic语言,对字符串数组进行排序,从键盘中输入一个6行参考代码: #include #include #define N 100int main(){char str[N][N], tmp[N];int i, j, ...

weixin_42514432的博客 4058

用c语言实现的字符串升序排序

#include&lt;stdio.h&gt; #include&lt;string.h&gt; int main() { int n; scanf("%d", &amp;n); getchar(); char str[100][100]; for(int i = 0; i &lt; n; i++) gets(str[i]); c...

lMonster81 2万+
上一篇: C语言---main函数的实现
下一篇: 【数据结构】-----非递归实现迷宫问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值