day05 数组 排序

来源:互联网 发布:淘宝上怎么买氰化钾 编辑:程序博客网 时间:2024/06/10 11:53
#pragma mark-数组
    //变量实际上就是一个容器,数组也是一个容器,,这个容器可以存储更多的内容。
   
//1.数组属于构造类型
   
//2.具有相同数据类型的成员组成一组数组。
   
//3.存储不同类型的数组有对应的名称,如:iOS,安卓版,
   
//同理,整数类型:数组中的成员都是整数,浮点型数组,数组中的成员是浮点型。
   
//4.数组是由多个成员组成而成,每个成员被称为数组元素。
   
//定义数组类型:
   
//类型修饰符数组名【常量表达式】={1,值2,值3}
   
//2.[]中设置数组中元素的个数,即数组的存储空间,只是常量表达式,不能是变量表达式,
   
//3.初始值之间使用间隔。
   
//方式1
   
//定义整数数组,数组中存储3个元素:123
   
//int a[3]={1,2,3};
   
   
//方式2没有赋值的元素,自动设置初始值为0;
   
//int a[5]={3,6,7};
   
//方式3
   
//int c[5]={0};
   
   
//方式4
   
//int c[]={7,5,3,8};
   
//误区:
   
//1.指定的数组元素个数,<设置初始的数量大于指定元素个数>
   
//int e[3]={1,2,3,4};
   
//2.既没有指定元素个数,也没有赋初值。
   
//int f[]={0};
   
//定义数组后,数组的存储空间是连续的。
   
//数组的存储空间:元素个数*元素占用的字节
   
//printf("%lu\n",sizeof(a));
   
//访问数组元素
  
//浮点型数组:
   
//float array[5]={1,2,5.2,3.6};
   
//字符型数组
//    char a1[6]={'i','p','h','o','n','e'};
//    char a2[6]="iPhone";
   
/*
     1.
不能一次整体调用整数数组全部元素的值,基本数据类型变量中值存储一个数据,数组中存储多个数据,不能通过数组变量调用所有的数组元素
     2.
访问数组元素:使用下标实现数组名【下标】;
     3.
下标:数组元素在数组中的序号,数组中的元素是有序的。每个元素都有序号,序号从0开始递增,最后一个元素的序号是n-1n表示数组元素的个数。
    
    4.
下标必须是整型常量
     */

   
//遍历数组
   
//按照顺序,从数组的第一个元素开始访问,访问到最后一个元素结束
   
//使用for循环实现数组访问
   
//循环和数组的关系很好
   
//int age[5]={15,18,14,16,9};
//    for (int i=0; i<5; i++) {
//        printf("age=%d\n",age[i]);
//    }
 
// 反向遍历
   
//按照从后面向前的顺序,输出数组元素
//    for (int i=4; i>=0; i--) {
//        printf("age=%d\n",age[i]);
//    }
   
  
//修改数组元素
   
//根据数组下标确定需要修改数组元素
   
//遍历数组
//    int array[]={1,2,3,4,5};
//    for (int i=0; i<5; i++) {
//        printf("%2d",array[i]);
//    }
//    printf("\n-------修改后--------\n");
//    array[0]=8;
//    array[3]=6;
//    for (int i=0; i<5; i++) {
//        printf("%2d",array[i]);
//    }
   
   
//越界:
   
//1.使用数组下标时,超出下标范围
//    int e[3]={1,2,3,4};
//    printf("%d",e[3]);
   
//2.数组越界很危险,一旦越界,即访问了不属于数组的存储空间
   
//3.编译器不会检测数组元素下标的越界,因此操作数组是必须保证没有越界。
   
   
//注意事项:
   
//1.定义数组数组元素
   
//2.数组作为一个整体不可以直接参与运算
   
//练习定义一个具有20个元素的整形数据,每个元素的取值范围是【3070】之间,求数组元素的和
//    int a[20]={0};
//    int sum=0;
//    for (int i=0; i<20; i++) {
//        a[i]=arc4random()%(70-30+1)+30;
//        sum +=a[i];
//    }
//    printf("sum=%d",sum);
   
   
//练习2:复制一个数组,即2个数组容器一样,把其中一个数组中的元素复制到另外一个数组中。
//    int array1[5]={33,55,32,64,23};
//    int array2[5]={0};
//    //复制数组
//        for (int i=0; i<5; i++)
//        {
//          
//            array2[i]=array1[i];
//        }
//    //打印
//       for (int i=0; i<5; i++)
//      {
//         printf("%3d",array2[i]);
//      }
   
//练习:生成2个数组,每个数组都有10个元素,元素取值范围【20,40】之间,数组对应元素相加,放到另外一个数组中。
//    int array1[10]={0};
//    int array2[10]={0};
//    int array3[10]={0};
//    printf("--------array1----------\n");
//    for (int i=0; i<10; i++) {
//        array1[i]=arc4random()%(40-20+1)+20;
//        printf("%3d",array1[i]);
//    }
//    printf("\n--------array2----------\n");
//    for (int i=0; i<10; i++) {
//        array2[i]=arc4random()%(40-20+1)+20;
//        printf("%3d",array2[i]);
//    }
//    printf("\n--------array3---------\n");
//    for (int i=0; i<10; i++) {
//        array3[i]=array1[i]+array2[i];
//        printf("%3d",array3[i]);
//    }
#pragma mark-数组排序 Sort
   
   
/*
    
冒泡排序的规律有2种:升序(小-大),降序(大到小)
     //
排序的基本思路:每次将相邻的2个数进行比较,按照升序或者降序的顺序进行交换,直到所有的数字顺序全部正确。
    
    //
排序:
    //
原始数据:28 36 19 2 23
    
第一趟:
       
第一次:28 36 19 2 23
       
第二次:28 19 36 2 23
       
第三次:28 19 2 36 23
       
第四次:28 19 2 23 36
    
第二趟:
       
第一次:19 28 2 23 36
       
第二次:19 2 28 23 36
       
第三次:19 2 23 28 36
    
第三趟:
       
第一次:2 19 23 28 36
       
第二次:2 19 23 28 36
    
第四趟:
       
第一次:2 19 23 28 36
     //
规律:n个元素比较n-1,次数等于数组个数-趟数
    */

//    int array[5]={28,36,19,2,23};
//    for (int i=0; i<5-1; i++)
//    {
//        for (int j=0; j<5-1-i; j++)
//        {
//            if (array[j]>array[j+1])
//            {
//                int temp=array[j];
//                array[j]=array[j+1];
//                array[j+1]=temp;
//            }
//        }
//    }
//    for (int i=0; i<5; i++) {
//        printf("%3d",array[i]);
//    }
   
//随机产生10个【2040】排序,升序
   
int array[10]={0};
   
//随机数
   
for (int i=0; i<10; i++) {
        array[i]=arc4random()%
21+20;
        printf(
"%3d",array[i]);
    }
   
//排序
   
for (int i=0; i<10-1; i++) {
       
for (int j=0; j<10-1-i; j++) {
           
if (array[j]>array[j+1]) {
               
int temp=array[j];
                array[j]=array[j+
1];
                array[j+
1]=temp;
            }
        }
    }
    printf(
"\n排序后\n");
   
for (int i=0; i<10; i++) {
        printf(
"%3d",array[i]);
    }
     return 0;
0 0
原创粉丝点击