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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© laotang013 中级黑马   /  2015-10-14 23:23  /  938 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
int arr[6] = {1,2,4,3,8,5};
从大到小排列:
  思路:
  1 把最大值放在第一位。首先需要进行双层for循环进行操作;
  因为一层只能进行一次操作;
  2 采用数组下标计算最大值进行交换的方法。这样其他的数字就不需要变化。
*/

#include <stdio.h>
int arr[6] = {1,2,4,3,8,5};
int main(int argc, const char * argv[]) {
/*   //假定一个最大值 每次为数组的第一个元素
    int tempMax;
    int temp;
    for (int i=0; i<5; i++)
    {
        tempMax = i;
        for (int j=i+1;j<6;j++)
        {
            //arr[tempMax]如果用arr[i]来计算,则当他大于该数时,一直没有变化,因此用tempMax
            if (arr[tempMax]<arr[j])
            {
                tempMax = j;
            }
           

        }
         //printf("%d----->  tempMax\n",tempMax);
            //通过循环找到了最大值的下标则进行交换
        temp = arr[i];
        arr[i] = arr[tempMax];
        arr[tempMax] = temp;
       // printf("arr[%d]------%d\n",i,arr[i]);
    }
    for (int i=0;i<6;i++)
    {
        printf("%d\t",arr[i]);
    }
    printf("\n");
  */
   
   
    //冒泡排序算法   两两进行比较;
    /*
     思路:
        小数下沉,双层for循环
        第一层控制需要比较的次数
        第二层用于比较,大则上升 交换两个数字的位置,每次上升之后则可以少比一次。因为最后一个数字已经下沉了。
     */
    /*
    int change;
    for(int i=0;i<6-1;i++)//n-1次
        for(int j=0;j<6-1-i;j++)
        {
            if(arr[j]< arr[j+1])
            {
                change = arr[j];
                arr[j]= arr[j+1];
                arr[j+1] = change;
            }
        }
   
    for (int i=0;i<6;i++) {
        printf("%d\t",arr[i]);
    }
    printf("\n");
    */
    //选择排序 每次都把最大的数字放在第一位
    /*
     思路:
       1 双重循环for 因为每次都只能确认一个,所以需要双重
       2 固定首位 用外层for循环arr[i]  n-1次 里层循环控制
     */
   
   
    int temp;
   
    for (int i=0;i<6-1;i++) {
        for (int j=i+1/*因为外层已经确定了,所以内存只需要+1*/; j<6; j++) {
            if (arr[i]<arr[j]) {
                //交换 始终保持arr[i]为最大值;
                temp  = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            
        }
    }
    for (int i=0;i<6;i++) {
        printf("%d\t",arr[i]);
    }
    printf("\n");
    return 0;
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马