A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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);
   






}


评分

参与人数 1黑马币 +6 收起 理由
acdd112 + 6 很给力!

查看全部评分

25 个回复

正序浏览
我是来刷黑马币的。。。目的十分明确
回复 使用道具 举报
顶一下...
回复 使用道具 举报
牛啊,11班的人都是大神啊,不错不错啊
回复 使用道具 举报
liury 中级黑马 2015-11-21 09:32:33
23#

               
回复 使用道具 举报
oo不错 谢谢咯
回复 使用道具 举报
sunyongji 来自手机 中级黑马 2015-11-20 23:24:54
21#
刀耕火种!!
回复 使用道具 举报
hei军 中级黑马 2015-11-20 23:23:17
20#
看不懂,怎么办
回复 使用道具 举报
我是来刷黑马币的。。。目的十分明确
回复 使用道具 举报
老乡加油。。。。
回复 使用道具 举报
666 ,我们班还有如此牛逼的大神呢!!!
回复 使用道具 举报
写的太好了,初学者的福音!!!
回复 使用道具 举报
牛逼 大牛人
回复 使用道具 举报
赞一下,写的太详细了……
回复 使用道具 举报
有没有人研究快速排序的,好像挺好玩的
回复 使用道具 举报
思路还还以,,只是看起来有点乱
回复 使用道具 举报
不错,哥们
回复 使用道具 举报
总结知识点很全面,以复制粘贴,最近总觉得看得懂却不会打,果然是得多敲代码么
回复 使用道具 举报
Mu。 中级黑马 2015-11-20 22:31:44
9#
流弊.黑马1111班顶起
回复 使用道具 举报
LuLouis 中级黑马 2015-11-20 22:30:34
8#
赞一个!!!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马