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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 649685603 中级黑马   /  2015-12-2 23:38  /  1872 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求大神教啊

16 个回复

倒序浏览

回帖奖励 +15

#include<stdio.h>                     void maoPao(int arr[],int length);                              {                                      int temp;                                      for(int i=0;i<length-1;i++){                                            for(int j=0;j<length-i-1;j++){                                                 if(arr[j]>arr[j+1]){                                                       temp=arr[j];                                                       arr[j]=arr[j+1];                                                       arr[j+1]=temp;                                                   }                                              }                                      }                             }                            int main(){                          int a[10]={1,200,23,45,12,34,19,4,388,63};                          maoPao(a,10);                          for(int i=0;i<10;i++){                               printf("%d\t",a[i]);                          }                          return 0;                     }
回复 使用道具 举报
额 大神 你给的这么乱啊..
回复 使用道具 举报
核心就是两两交换
回复 使用道具 举报
  百度一下
回复 使用道具 举报
包含技术内容:选择排序 正序 倒序 冒泡排序 正序 倒序  输入 输出  函数调用 地址传递 三目运算符 等 包含了 前期基础的很多内容
函数功能:自己定义数组长度 输入元素 定义数组 选择 排序方法 以及  排序顺序  实现排序
总共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. #include <stdio.h>
  2. void maoPao(int arr[],int len);
  3. int main(int argc, const char * argv[])
  4. {
  5.     int a[5]={10,2,33,46,5};
  6.     //排序前
  7.     for (int i = 0; i<5; i++)
  8.     {
  9.         printf("%d\t",a[i]);
  10.     }
  11.     printf("\n");
  12.     maoPao(a,5);
  13.     //排序后
  14.     for (int i = 0; i<5; i++)
  15.     {
  16.         printf("%d\t",a[i]);
  17.     }
  18.     return 0;
  19. }
  20. void maoPao(int arr[],int len)
  21. {
  22.     int temp;
  23.     //外层循环跑len-1趟
  24.     for (int j = 0; j<len-1; j++)
  25.     {
  26.         //每一趟跑len-1-j
  27.         for (int i = 0; i<len-1-j; i++)
  28.         {
  29.             if (arr[i]>arr[i+1])
  30.             {
  31.                 temp = arr[i];
  32.                 arr[i] = arr[i+1];
  33.                 arr[i+1] = temp;
  34.             }
  35.         }
  36.         
  37.     }
  38. }
复制代码
回复 使用道具 举报
看看书吗,书上写得很详细的
回复 使用道具 举报
都晕着呢..
回复 使用道具 举报
伟哥的视频认真看看就OK了
回复 使用道具 举报
自己画画图,多看看 就差不多。很简单的。
回复 使用道具 举报
不错.......................
回复 使用道具 举报
先看懂基础视屏里讲的思路,然后自己写下伪代码,再根据伪代码写代码。不要怕,勇敢的写,反正可以无限调试,即使写的不对,用单步调试调也能把代码调对。总之写就是了。
回复 使用道具 举报
视频里面应该讲得蛮清楚了   好好看看
回复 使用道具 举报
这大神的想法就是6啊!
回复 使用道具 举报
核心就是两两交换,这句话是双关吗哈哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马