C语言经典实例:21-30例:插入排序、希尔排序1、快速排序、希尔排序2(1)

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

			R[j + 1] = R[j];
			R[j] = R[0];

			// 发生了交换,故将交换标志置为真 
			exchange = 1; 
		}
	}

	if (!exchange) // 本趟排序未发生交换,提前终止算法 
		return;
}

}


然后在main()函数中只调用func22()函数,其调试结果如下  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f956ae7dfb104d51ab12a70430c60de2.png#pic_center)


#### 3.3、C语言经典实例23-快速排序


在Main.h头文件中声明一个func23函数、Quick\_Sort函数和Partition函数,然后再Main.c源文件中定义func23函数、Quick\_Sort函数和Partition函数,并实现相关的功能。  
 Main.h头文件添加的代码如下



// 实例23:快速排序
void func23();
void Quick_Sort(int low, int high);
int Partition(int i, int j);


Main.c源文件添加的代码如下



// 实例23:快速排序
void func23()
{
srand((unsigned)time(NULL)); // 随机数播种函数
for (i = 1; i < RMAX; i++) // 产生十个随机数
R[i] = rand() % 100 + 1; // 设定随机数范围并输出

printf("产生十个不同的随机数是:");
for (i = 1; i < RMAX; i++)
	printf("%4d", R[i]);

Quick\_Sort(1, MAX);

printf("\n快速排序后的序列为:");
for (i = 1; i < RMAX; i++)
	printf("%4d", R[i]);
printf("\n");

}

void Quick_Sort(int low, int high)
{
// 对R[low…high]快速排序
// 划分后的基准记录的位置
int pivotpos;

// 仅当区间长度大于1时才须排序 
if (low < high) 
{
	// 对R[low..high]做划分 
	pivotpos = Partition(low, high); 

	// 对左区间递归排序 
	Quick\_Sort(low, pivotpos - 1); 
	
	// 对右区间递归排序 
	Quick\_Sort(pivotpos + 1, high); 
}

}

int Partition(int i, int j)
{
// 调用Partition(R,low,high)时,对R[low…high]做划分,
// 并返回基准记录的位置
int pivot = R[i]; // 用区间的第1个记录作为基准

// 从区间两端交替向中间扫描,直至i=j为止 
while (i < j)  
{
	// pivot相当于在位置i上 
	while (i < j && R[j] >= pivot) 
		j--;						// 从右向左扫描,查找第1个关键字小于pivot.key的记录R[j] 

	if (i < j)						// 表示找到的R[j]的关键字<pivot.key 
		R[i++] = R[j];				// 相当于交换R[i]和R[j],交换后i指针加1 
	while (i < j && R[i] <= pivot)	// pivot相当于在位置j上
		i++;						// 从左向右扫描,查找第1个关键字大于pivot.key的记录R[i] 
	if (i < j)						// 表示找到了R[i],使R[i].key>pivot.key 
		R[j--] = R[i];				// 相当于交换R[i]和R[j],交换后j指针减1 
} 
R[i] = pivot; // 基准记录已被最后定位
return i;

}


然后在main()函数中只调用func23()函数,其调试结果如下  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/05e0565914d34c7a94cd223025139355.png#pic_center)


#### 3.4、C语言经典实例24-希尔排序2


在Main.h头文件中声明一个func24函数、Shell\_Sort函数和ShellPass函数,然后再Main.c源文件中定义func24函数,并实现相关的功能。  
 Main.h头文件添加的代码如下



// 实例24:希尔排序2
void func24();
void Shell_Sort(int n);
void ShellPass(int d, int n);


Main.c源文件添加的代码如下



// 实例24:希尔排序
void func24()
{
srand((unsigned)time(NULL)); // 随机数播种函数
for (i = 1; i < RMAX; i++) // 产生十个随机数
R[i] = rand() % 100 + 1; // 设定随机数范围并输出

printf("产生十个不同的随机数是:");
for (i = 1; i < RMAX; i++)
	printf("%4d", R[i]);

Shell\_Sort(MAX);

printf("\n希尔排序后的序列为:");
for (i = 1; i < RMAX; i++)
	printf("%4d", R[i]);
printf("\n");

}

void Shell_Sort(int n)
{
// 增量初值,不妨设n>0
int increment = n;

do
{
	//求下一增量 
	increment = increment / 3 + 1;

	// 一趟增量为increment的Shell插入排序 
	ShellPass(increment, n); 
} while (increment > 1);

}

void ShellPass(int d, int n)
{
// 希尔排序中的一趟排序,d为当前增量
int i, j;

// 将R[d+1..n]分别插入各组当前的有序区 
for (i = d + 1; i <= n; i++) 
{
	if (R[i] < R[i - d])
	{
		R[0] = R[i];
		j = i - d; // R[0]只是暂存单元,不是哨兵 
		do  // 查找R[i]的插入位置 
		{
			R[j + d] = R[j];// 后移记录 
			j = j - d; // 查找前一记录 
		} while (j > 0 && R[0] < R[j]);
		R[j + d] = R[0]; // 插入R[i]到正确的位置上 
	}
}

}


然后在main()函数中只调用func24()函数,其调试结果如下  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3c20e799058b44c9947a073f284d788e.png#pic_center)


#### 3.5、C语言经典实例25-递归法


在Main.h头文件中声明一个func25函数和reverse函数,然后再Main.c源文件中定义func25函数和reverse函数,并实现相关的功能。  
 Main.h头文件添加的代码如下



// 实例25:递归法
void func25();
void reverse(int x);


Main.c源文件添加的代码如下



// 实例25:递归法
void func25()
{
int x;
printf(“输入一个整数(不大于五位数):”);
scanf(“%d”, &x); // 由用户输入一个不大于五位数的整数

printf("%d反序输出的结果为:", x);
reverse(x);					// 调用reverse()函数

printf("\n");

}

void reverse(int x) // 利用递归法求反序的输出
{
printf(“%d”, x % 10); // 先输出最后一位数
if (x / 10) // 如果x是大于两位的整数
reverse(x / 10); // 调用它本身
}


然后在main()函数中只调用func25()函数,其调试结果如下  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f0a2eeab60b5490b91caa0b7df7d841c.png#pic_center)


#### 3.6、C语言经典实例26-完数


在Main.h头文件中声明一个func26函数,然后再Main.c源文件中定义func26函数,并实现相关的功能。  
 Main.h头文件添加的代码如下



// 实例26:完数
void func26();


Main.c源文件添加的代码如下



// 实例26:完数
void func26()
{
int i, j, k;
for (i = 1; i < 1000; i++)
{
int sum = 0;
for (j = 1; j < i; j++)
{
if (i % j == 0)
{
sum += j;
}
}
if (sum == i)
{
printf(“%d its factors are “, i);
for (k = 1; k < i; k++)
{
if (i % k == 0)
{
printf(”%d “, k);
}
}
printf(”\n”);
}
}
}


然后在main()函数中只调用func26()函数,其调试结果如下  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/575c935bafc941dc9ba3bd12557f8ba1.png#pic_center)


#### 3.7、C语言经典实例27-斐波那契数列


在Main.h头文件中声明一个func27函数,然后再Main.c源文件中定义func27函数,并实现相关的功能。  
 Main.h头文件添加的代码如下



// 实例27:斐波那契数列
void func27();


Main.c源文件添加的代码如下



// 实例27:斐波那契数列
void func27()
{
long f1, f2, i;
f1 = f2 = 1;

//前两项为1
printf("斐波那契(Fibonacci)数列的前20项有:\n");

//输出f1,f2
printf("%6d%6d", f1, f2);							

//计算第3项到第20项
for (i = 3; i <= 20; i += 2)					
{
	//计算第3项到第20项
	for (i = 3; i <= 20; i += 2)
	{
		//计算下两项
		f1 = f1 + f2;
		f2 = f1 + f2;

		//每输出十项换行
		if (i % 11 == 0)
			printf("\n");

		//输出f1,f2
		printf("%6d%6d", f1, f2);  
	}
}
printf("\n");

}


然后在main()函数中只调用func27()函数,其调试结果如下  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a245a915d247495386335077e9a4cab3.png#pic_center)


#### 3.8、C语言经典实例28-公约数和公倍数


在Main.h头文件中声明一个func28函数,然后再Main.c源文件中定义func28函数,并实现相关的功能。  
 Main.h头文件添加的代码如下



// 实例28:公约数和公倍数
void func28();


Main.c源文件添加的代码如下



// 实例28:公约数和公倍数
void func28()
{
int x, y, z, m, n;
printf(“请输入两个数:”);
scanf(“%d%d”, &x, &y);
m = x, n = y;
while (y != 0)
{
z = x % y;
x = y;
y = z;
}
printf(“最大公约数是: %d\n”, x);
printf(“最小公倍数是: %d\n”, m * n / x);
}


然后在main()函数中只调用func18()函数,其调试结果如下  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/05d8813ba21b4a44a6044839fd825214.png#pic_center)


#### 3.9、C语言经典实例29-统计单词个数


在Main.h头文件中声明一个func29函数,然后再Main.c源文件中定义func29函数,并实现相关的功能。  
 Main.h头文件添加的代码如下



// 实例29:统计单词个数
void func29();


Main.c源文件添加的代码如下



// 实例29:统计单词个数
void func29()
{
char s[200];
int i, n = 0, flag = 1;

gets(s);//输入字符串。

for (i = 0; s[i]; i++)				//遍历
{
	if (flag == 1)
	{

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

n = 0, flag = 1;

gets(s);//输入字符串。

for (i = 0; s[i]; i++)				//遍历
{
	if (flag == 1)
	{

[外链图片转存中…(img-jWmQJNhM-1715867276647)]
[外链图片转存中…(img-X3TIyN4u-1715867276647)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值