黑马程序员技术交流社区
标题:
冒泡和选择排序 综合源代码分享(内涵详细注释)
[打印本页]
作者:
mangnani
时间:
2015-11-20 21:55
标题:
冒泡和选择排序 综合源代码分享(内涵详细注释)
本帖最后由 mangnani 于 2015-11-20 22:19 编辑
包含技术内容:选择排序 正序 倒序 冒泡排序 正序 倒序 输入 输出 函数调用 地址传递 三目运算符 等 包含了 前期基础的很多内容
函数功能:自己定义数组长度 输入元素 定义数组 选择 排序方法 以及 排序顺序 实现排序
总共100行左右的代码每一部分都有细节的注释
手打的,大家支持一下。
#include <stdio.h>
//通过参数传递 获得 数组地址 对主函数中的 数组 进行操作 接收数组长度 于 选择 正倒序 输出参数
void xuanZePaiXu(int a[],int len, int flag){
//定义一个 tempmax 假设为 数组元素中 最大值 所对应的 下标 为 0 也就是假设第一位是最大值
int tempmax=0;
//双层for循环 实现 比较 以及 交换
//外层for循环控制 需要排列的 数字有几个。比如数组有5个元素 只要排好4个即可 所以 i小于len-1
for (int i=0; i<len-1; i++) {
//tempmax=i 控制 每次 交换的起点 (比较元素 起点 )为i
tempmax=i;
//内循环控制 每一轮排序 需要比较的次数 j控制 被对比元素 起点 j=1+i
for (int j=1+i; j<len; j++) {
//通过单目运算符 实现 通过参数 控制 正序或 倒序 输出
// 比较 假设最大元素下表 于 其他元素进行比较 并对tempmx进行重新赋值
//若是小于 那么挑选出来的是 最小值 大于 是最大值
if (flag ? (a[tempmax]>a[j]):(a[tempmax]<a[j])) {
tempmax=j;
}
}
//每一轮求出来的最大或者最小元素 于 每一轮比较第一个元素进行交换
int temp=a
;
a
=a[tempmax];
a[tempmax]=temp;
}
}
// 通过 参数的传递 获得 需要改动的数组 于 数组的长度 以及 控制正序 倒序 输出的 参数flag
void maoPaoPaiXu(int a[],int len,int flag){
//定义变量 temp 为临时值 用于最后交换
int temp=0;
//外轮循环控制 需要排序的次数 5个元素的只需要排序4次 所以 循环次数 为len-1次
for (int i=0; i<len-1; i++) {
//内循环控制 每一轮比较的次数 j<len-1-i 每一轮少比较一次
// j也代表 比较元素的起点
for (int j=0; j<len-1-i; j++) {
// 通过比较 相邻值 大小 交换 前后数值 实现 大数下沉(正序)或 小数下沉(倒序)
//通过 参数 flag 以及三木元算 控制 正倒顺序,
if (flag?(a[j]>a[j+1]):(a[j]<a[j+1])) {
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
//定义一个输出 数组元素的函数 参数为 数组地址 以及 数组长度
void print_a(int a[],int len){
//通过for循环 实现 数组的输出
for (int i=0; i<len; i++) {
printf("%d\t",a
);
}
printf("\n");
}
int main(int argc,const char*argv[]){
//定义一个选择方法 变量
int solution;
//定义一个数组变量 作为 数组长度
int len;
//提示用户输入 数组长度
printf("请输入一个数字规定 数组的长度\n");
//接收用户输入长度
scanf("%d",&len);
//通过len定义一个数组a
int a[len];
//提示用户输入元素完善数组
printf("请根据长度输入一组整形数字完善数组,每输入一个数用enter确认\n");
//通过for循环接受用户输入元素 完善数组
for (int i=0; i<len; i++) {
scanf("%d",&a
);}
//输出 用户 完善的 数组
print_a(a,len);
int flag;
//提示用户 选择 正序活着倒序
printf("请选择正序或者倒序 排列数组 正序 输入1+enter 倒序输入 0+enter\n");
//接受用户输入的 flag
scanf("%d",&flag);
//提示用户 选择 排序方法
printf("请选择冒泡排序活着选择排序方法 排列数组 冒泡 输入1+enter 选择输入 0+enter\n");
//接受用户输入排序方法
scanf("%d",&solution);
//通过用户输入的参数 实现功能
solution?maoPaoPaiXu(a,len,flag):xuanZePaiXu(a,len,flag);
//通过 调用输出函数 实现输出元素
print_a(a,len);
}
作者:
指破苍穹
时间:
2015-11-20 22:01
太棒了,初学者的福音,顶顶顶
作者:
Cheng-n
时间:
2015-11-20 22:01
此代码 神级的, 这包含前8天的所有知识了, 可以给小白洗洗脑了.不错不错.....新手可以复制走参考一下 不错的!!
作者:
Tactful丶boy
时间:
2015-11-20 22:09
太赞了 给力
作者:
呐小伟
时间:
2015-11-20 22:11
我就想要黑马币
作者:
acdd112
时间:
2015-11-20 22:20
总结知识点很全面 大神很给力
作者:
stage
时间:
2015-11-20 22:21
已复制黏贴备用
作者:
LuLouis
时间:
2015-11-20 22:30
赞一个!!!
作者:
Mu。
时间:
2015-11-20 22:31
流弊.黑马1111班顶起
作者:
这个冬天有点冷
时间:
2015-11-20 22:39
总结知识点很全面,以复制粘贴,最近总觉得看得懂却不会打,果然是得多敲代码么
作者:
FengLinHuoShan
时间:
2015-11-20 22:49
不错,哥们
作者:
IPswhatb“is”
时间:
2015-11-20 22:54
思路还还以,,只是看起来有点乱
作者:
唯有繁星
时间:
2015-11-20 23:11
有没有人研究快速排序的,好像挺好玩的
作者:
wang22290
时间:
2015-11-20 23:11
赞一下,写的太详细了……
作者:
韩三少
时间:
2015-11-20 23:14
牛逼 大牛人
作者:
wanglei9893
时间:
2015-11-20 23:15
写的太好了,初学者的福音!!!
作者:
海风眷恋的沙
时间:
2015-11-20 23:15
666 ,我们班还有如此牛逼的大神呢!!!
作者:
tommao652
时间:
2015-11-20 23:20
老乡加油。。。。
作者:
约吗^_^
时间:
2015-11-20 23:21
我是来刷黑马币的。。。目的十分明确
作者:
hei军
时间:
2015-11-20 23:23
看不懂,怎么办
作者:
sunyongji
时间:
2015-11-20 23:24
刀耕火种!!
作者:
iOS逆袭
时间:
2015-11-20 23:35
oo不错 谢谢咯
作者:
liury
时间:
2015-11-21 09:32
赞
作者:
听你说
时间:
2015-11-21 21:31
牛啊,11班的人都是大神啊,不错不错啊
作者:
如果还有信仰
时间:
2015-11-21 22:03
顶一下...
作者:
649685603
时间:
2015-11-21 22:05
我是来刷黑马币的。。。目的十分明确
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2