c语言----- 冒泡排序 for while do-while 递归练习
1. 冒泡排序简介(默认从小到大排序)
核心思想:只比较相邻的两个元素,如果满足条件就交换
5 8 2 1 6 9 4 3 7 0
目标:0 1 2 3 4 5 6 7 8 9
第一次排序:
5 < 8 不交换
5 8 2 1 6 9 4 3 7 0
8 >2 满足条件 交换....
5 2 8 1 6 9 4 3 7 0
5 2 1 8 6 9 4 3 7 0
5 2 1 6 8 9 4 3 7 0
5 2 1 6 8 9 4 3 7 0
5 2 1 6 8 4 9 3 7 0
5 2 1 6 8 4 3 9 7 0
5 2 1 6 8 4 3 7 9 0
5 2 1 6 8 4 3 7 0 9
下一次交换
2 5 1 6 8 4 3 7 0 9
2 1 5 6 8 4 3 7 0 9
2 1 5 6 8 4 3 7 0 9
2 1 5 6 8 4 3 7 0 9
2 1 5 6 4 8 3 7 0 9
2 1 5 6 4 3 8 7 0 9
2 1 5 6 4 3 7 8 0 9
2 1 5 6 4 3 7 0 8 9
下一次交换
1 2 5 6 4 3 7 0 8 9
1 2 5 6 4 3 7 0 8 9
1 2 5 6 4 3 7 0 8 9
1 2 5 4 6 3 7 0 8 9
1 2 5 4 3 6 7 0 8 9
1 2 5 4 3 6 7 0 8 9
1 2 5 4 3 6 0 7 8 9
下一次交换
1 2 5 4 3 6 0 7 8 9
1 2 5 4 3 6 0 7 8 9
1 2 4 5 3 6 0 7 8 9
1 2 4 3 5 6 0 7 8 9
1 2 4 3 5 6 0 7 8 9
1 2 4 3 5 0 6 7 8 9
下一次交换
1 2 4 3 5 0 6 7 8 9
1 2 4 3 5 0 6 7 8 9
1 2 3 4 5 0 6 7 8 9
1 2 3 4 5 0 6 7 8 9
1 2 3 4 0 5 6 7 8 9
下一次交换
1 2 3 4 0 5 6 7 8 9
1 2 3 4 0 5 6 7 8 9
1 2 3 4 0 5 6 7 8 9
1 2 3 0 4 5 6 7 8 9
下一次交换
1 2 3 0 4 5 6 7 8 9
1 2 3 0 4 5 6 7 8 9
1 2 0 3 4 5 6 7 8 9
下一次交换
1 2 0 3 4 5 6 7 8 9
1 0 2 3 4 5 6 7 8 9
下一次交换
0 1 2 3 4 5 6 7 8 9
2. 总共进行了 n-1次大的交换(n个元素 只有1个元素不需要排序)
5 2 1 6 8 4 3 7 0 9 //这次交换 一共变化了9次
2 1 5 6 4 3 7 0 8 9 // 8次
1 2 5 4 3 6 0 7 8 9
1 2 4 3 5 0 6 7 8 9
1 2 3 4 0 5 6 7 8 9
1 2 3 0 4 5 6 7 8 9
1 2 0 3 4 5 6 7 8 9
1 0 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
每一次小交换是9 8 7 6 5 4 3 2 1 次交换,也就是说
for(int i = ;i < N-;i++){
for(int j = ;j < N--i;i++){
交换 ...
}
}
3. 实战 for while do-while 递归
#include<stdio.h>
#include<stdlib.h>
#define N 10
void print(int *a){
for (int i = ; i < N; i++)
{
printf("%d ",*(a+i));
}
printf("\n");
}
void maopao_for(int *a){
for (int i = ; i < N - ; i++) {
for (int j = ; j < N - - i; j++) {
if (a[j] > a[j + ]) {
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
}
}
print(a);
}
}
void maopao_while(int *a) {
int i = ;
while (i < N - )
{
int j = ;
while (j < N - - i)
{
if (a[j] > a[j + ]) {
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
}
j++;
}
print(a);
i++;
}
}
void maopao_do_while(int *a) {
int i = ;
do{
int j = ;
do{
if (a[j] > a[j + ]) {
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
}
j++;
} while (j < N - - i);
print(a);
i++;
} while (i < N - );
}
// 递归可以减少一次循环
void maopao_digui(int *a,int count) {
if(count>=N) return ;
for (int j = ; j < N - - count; j++) {
if (a[j] > a[j + ]) {
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
}
}//printf("下一次交换\n\n\n");
print(a);
maopao_digui(a,count+);
}
int main(){
int a[N] = {,,,,,,,,,};
printf("排序前:\n");
print(a);
printf("排序中:\n");
maopao_digui(a,);
printf("排序后:\n");
print(a);
return ;
}
c语言----- 冒泡排序 for while do-while 递归练习的更多相关文章
- 用C语言实现汉诺塔自动递归演示程序
用C语言实现汉诺塔自动递归演示程序 程序实现效果 1.变界面大小依照输入递归数改变. 2.汉诺塔自动移动演示. 3.采用gotoxy实现流畅刷新. 4.保留文字显示递归流程 程序展示及实现 githu ...
- c语言的extern与static与递归
知识点: 外部函数:定义的函数能被本文件和其他文件访问 1> 默认情况下所有函数都是外部函数 2> 不允许有同名的外部函数 内部函数:定义的函数只能被本文件访问,其他文件不能访问 1> ...
- 用c语言实现前序创建二叉树(递归),分别用前序,中序,后序遍历,以及分别输出节点个数和叶子节点个数
本人c语言小白一枚,近期在学习数据结构(c语言版),特写此随笔,做一些总结和分享,如有不当之处,请各位技术大牛斧正 首先我们用一个结构体来抽象树的结点,代码如下(这里我们存放的数据为char型,大家可 ...
- c语言冒泡排序
在C语言中,常用的排序算法有:冒泡排序.快速排序.插入排序.选择排序.希尔排序.堆排序以及归并排序等等. 冒泡排序基本概念: 依次比较相邻的两个数,将小数放在前面,大数放在后面. #include ...
- 【C语言入门教程】5.4 递归
递归函数 是能够直接或通过另一个函数间接调用自身的函数,调用自身的方法称为递归调用.递归调用的本质是使用同一算法将复杂的问题不断化简,直到该问题解决. 例如求斐波那契数列的某一项算法适用于递归函数实现 ...
- c语言冒泡排序,指针,数组
冒泡排序算法的运作如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复 ...
- 【C语言】reverse_string(char * string)(递归)
递归reverse_string(char * string)性能. 逆转 原始字符串 更改 相反,打印出的. /* 编写一个函数reverse_string(char * string)(递归实现) ...
- sdut oj 1163 C语言实验——排列 (当初不会递归生成排列,这个题目现在才补上 刘汝佳给出了写法 *【模板】 当然有生成全排列的函数存在 )
C语言实验——排列 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 有4个互不相同的数字,请按序输出由其中三个不重复数字组成的排列 ...
- 史上最详细的C语言冒泡排序算法
未经同意,请勿转载. void bubbing(){ ] = {,,,,,,,,,};//define init the array //going to the exinternal loop,st ...
随机推荐
- 深入解读ES6系列(三)
ES6字符串 哈喽小伙伴们,爱说'废'话的Z又回来了,欢迎来到Super IT曾的博客时间,上一节说了函数,解构赋值和数组的五大将,这一节我们继续我们知识的海洋,一起奋斗不秃头!不足的欢迎提问留言. ...
- js生成一个指定范围内的随机整数
function __random(start=0, end=1) { return Math.floor(Math.random() * (end - start + 1) + start); } ...
- Redis新手的坑,无法连接、缺少类、没有密码
阿西吧,自己太菜了,用SpringBoot调用Redis缓存的时候,出了各种问题,记录一下,大家别学我 本文有自己的经验,也有从其他博客整理来的零零散散的经验. 1.安装Redis 安装redis,一 ...
- Python Count函数的应用
Python Count函数的应用 通过LeetCode Origin:https://leetcode-cn.com/problems/robot-return-to-origin/ 学会了Pyth ...
- 请设计 一个密码生成器,要求随机生成4组10位密码(C语言)
请设计 一个密码生成器,要求随机生成4组10位密码(密码只能由字母和数字组成),每一组必须包含至少一个大写字母,每组密码不能相同,输出生成的密码. #include<stdio.h> #i ...
- 答好友困惑:Java零基础如何入门,不知道怎么学,迷茫ING
作者:程序员小跃 几个星期之前,我在知乎上看到一个提问,说是:对于完全没有经验零基础自身的数学底子也很弱学习Java应该怎么学习呢?想着类似的问题我也有过回答,并且反馈还是蛮好的,就参考之前的思路回答 ...
- 智芯微版本的智能配变融合终端交流采集APP
1. 交采APP基本原理 通过SPI总线周期性的召测交流采集底板的“实时数据”,对“实时数据”变换.加工.统计分析得到“分析数据”和“统计数据”后,通过MQTT总线把这些数据同步到“数据中心”供其他 ...
- list 的sublist 隐藏 bug
list A = new list(); list a = A.sublist(0,3); 假如对a进行增加或者删除 会 同样改变A里的值,即其实a仅仅是A的一个试图,而不是一个新的list 对象,所 ...
- ASE past project:interview & analysis
采访往届ASE课程学员李潇,他所在的团队blog戳这里http://www.cnblogs.com/smart-code/ Q1:师兄你觉得在团队项目中,有哪些需要注意的事情? A1:团队合作吧.首先 ...
- Anadi and Domino--codeforces div2
题目链接:https://codeforces.com/contest/1230/problem/C 题目大意:21枚多米诺牌,给你一个图,将多米诺牌放到图的边上,由同一个点发出的所有边,边上多米诺牌 ...