c语言----- 冒泡排序 for while do-while 递归练习
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c语言----- 冒泡排序 for while do-while 递归练习,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2725字,纯文字阅读大概需要4分钟。
内容图文
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 = 0;i < N-1;i++){ for(int j = 0;j < N-1-i;i++){ 交换 ... } }
3. 实战 for while do-while 递归
#include<stdio.h> #include<stdlib.h> #define N 10 void print(int *a){ for (int i = 0; i < N; i++) { printf("%d ",*(a+i)); } printf("\n"); } void maopao_for(int *a){ for (int i = 0; i < N - 1; i++) { for (int j = 0; j < N - 1 - i; j++) { if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } print(a); } } void maopao_while(int *a) { int i = 0; while (i < N - 1) { int j = 0; while (j < N - 1 - i) { if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } j++; } print(a); i++; } } void maopao_do_while(int *a) { int i = 0; do{ int j = 0; do{ if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } j++; } while (j < N - 1 - i); print(a); i++; } while (i < N - 1); } // 递归可以减少一次循环 void maopao_digui(int *a,int count) { if(count>=N) return ; for (int j = 0; j < N - 1 - count; j++) { if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } }//printf("下一次交换\n\n\n"); print(a); maopao_digui(a,count+1); } int main(){ int a[N] = {5,8,2,1,6,9,4,3,7,0}; printf("排序前:\n"); print(a); printf("排序中:\n"); maopao_digui(a,0); printf("排序后:\n"); print(a); return0; }
原文:https://www.cnblogs.com/mofei1999/p/11780149.html
内容总结
以上是互联网集市为您收集整理的c语言----- 冒泡排序 for while do-while 递归练习全部内容,希望文章能够帮你解决c语言----- 冒泡排序 for while do-while 递归练习所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。