黑马程序员技术交流社区

标题: 排序算法 [打印本页]

作者: laotang013    时间: 2015-10-14 23:23
标题: 排序算法
/*
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;
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2