黑马程序员技术交流社区

标题: 冒泡和选择排序 综合源代码分享(内涵详细注释) [打印本页]

作者: 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