C语言实用算法系列之冒泡排序、sizeof与strlen的区别

本文探讨C语言中的冒泡排序算法实现,并详细解析sizeof和strlen两个关键函数的区别,通过实例代码加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接看代码

#include <stdio.h>
#include<string.h>
int main()
{
   
   
	//char s[10] = { 98,68,55,'-','x','y' }; // sizeof=10 strlen =6
	//char s[10] = "abc%78"; // 从常量区拷贝赋值,sizeof=10 strlen =6
	//char
你提到的是对单个数字“2416455009”进行冒泡排序。实际上,冒泡排序是对一组数(通常是数组)进行排序的一种简单算法。因此我们首先需要将这个数字分解为各个位上的数值组成一个数组来进行排序。 ### 冒泡排序的基本原理 冒泡排序是一种简单的比较排序算法。它的基本思想是从待排序序列的第一个元素开始两两相邻的元素依次进行比较,若前者大于后者则交换这两个元素的位置,这样每一轮循环结束都能确定当前未排好序的最大或最小值放置到了最后一位;接下来再继续处理剩余的部分直到整个列表有序为止。 #### 步骤说明: 1. 比较相邻两个元素。 2. 如果前面的比后面的打就交换两者的位置。 3. 对每一对相邻元素做同样的工作,从起始位置一直到最后第二个位置。 4. 针对所有的元素重复以上步骤,除了最后一个已经排好的最大/小者不需要参下轮比较。 5. 重复上述过程n-1趟(n表示数组长度),即可得到完全升序排列的结果集合。 下面是如何在 C 语言中编写一段代码把整数 "2416455009" 的每一位分离出来存入数组,并对该数组应用冒泡排序的例子: ```c #include <stdio.h> #include <string.h> // 定义冒泡排序函数 void bubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; ++i) // 最后一次遍历只有一项时停止 for (int j = 0; j < n - 1 - i; ++j) if (arr[j] > arr[j + 1]) { // 升序排列 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } int main() { char str[] = "2416455009"; // 原始长整型作为字符串输入 int len = strlen(str); // 计算字符的数量即转换后的数组大小 // 动态分配内存存放每个单独数字组成的整形数组 int *digitsArray = (int *)malloc(len * sizeof(int)); // 字符串转成对应的ASCII码减去‘0’获得真正的阿拉伯数字存储进数组里 for (int k = 0; k < len; ++k){ digitsArray[k]=str[k]-'0'; } printf("Original array is : "); for (int m=0;m<len;m++)printf("%d ",digitsArray[m]); printf("\n"); // 调用自定义的bubbleSort函数实施从小到大的顺序重排 bubbleSort(digitsArray, len); printf("Sorted array in ascending order: "); for (int l = 0;l <len ;++l ) printf("%d",digitsArray[l]); free(digitsArray); return 0; } ``` 这段代码演示了如何提取并排序 “2416455009”的每一个位上的值。最终结果将是按递增顺序打印出这些位构成的新数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

codersnote

对学生党 赞赏是鼓励也是鞭策!

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

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

打赏作者

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

抵扣说明:

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

余额充值