数组 冒泡排序法

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//数组:一组相同类型元素的集合
//创建方式:type_t   arr_name    [const_n]
//例: int arr[10]   char ch[5]

// char ch[10] = { 'a','b','c' };
// //a b c 0 0 0 0 0 0 0 
// char ch1[10] = "abc";
// //a b c \0 0 0 0 0 0 0

//int main()
//{
//    int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//    //[] - 下标引用操作符
//    //printf("%d\n",arr[4]);//结果为5
//    int i = 0;
//    
//    //打印每个元素的地址
//    for (i = 0; i < 10; i++)
//    {
//        printf("&arr[%d] = %p\n", i,&arr[i]);
//    }
//    
//    /*想全部打印每个元素要用循环
//    for (i = 0; i < 10; i++) //元素过多 个数用int sz=sizeof(arr)/sizeof(arr[1])计算
//    {
//        printf("%d\n", arr[i]);
//    }*/
//    return 0;
//}

/                        二维数组

//数组创建: int arr[3][4];  char arr[3][5];   double arr[3][4];
  //可以看做三行四列
//数据
//1 2 3 4 
//2 3 4 5
//3 4 5 6

//数组初始化
//int main()
//{    
//    //存放数据可以
//    int arr1[3][4] = { 1,2,3,4,2,3,4,5,3,4,5,6 };//如果不够 会依次放入 后面补0
//    //也可以像:int arr1[3][4] = {{1,2},{3,4},{5,6}}; 此结果后两列为0
//    return 0;  //初始化行可以省略 列不能
//}

//数组的使用 
//int main()
//{
//    int arr[3][4] = { 1,2,3,4,2,3,4,5,3,4,5,6 };
//    int i = 0;
//    //打印某个元素
//    printf("%d\n", arr[2][0]);  //二维数组行列 下标也是从0开始
//
//    //打印全部数组
//    /*for (i = 0; i < 3; i++)
//    {
//        int j = 0;
//        for (j = 0;j < 4;j++)
//        {
//            printf("%d ", arr[i][j]);
//        }
//        printf("\n");
//    }*/
//    return 0;
//}

//数组作为函数参数传参
//形参有两种写法
//1.数组
//2.指针
 
//冒泡排序
//核心思想:两个相邻元素进行比较
//  《一趟冒泡排序会让一个数据来到它最终应该出现的位置上》
// 
//1.数组形式传参
//void bubble_sort(int arr[],int sz)   //数组名本质是数组首元素地址
//{               //在函数内部计算int sz = sizeof(arr) / sizeof(arr[0]);
//              //地址应该指针接收所以(int arr[]) 中的arr本质是指针变量 
//                  //所以这里的sz值为1,不对  //可以在主函数算出sz 再传到函数
//    //确定趟数 本例子需要元素个数-1趟      
//    int i = 0;
//    for (i = 0; i < sz - 1; i++)
//    {
//        //一趟冒泡排序
//        int j = 0;
//        for (j = 0; j <sz-1-i; j++)  //第一趟有10个元素排序比较 进行9次比较 第二趟8次
//        {                              //所以元素个数减一,再减去进行的躺数
//            if (arr[j] > arr[j + 1])
//                //交换
//            {
//                int tmp = arr[j];
//                arr[j] = arr[j + 1];
//                arr[j + 1] = tmp;
//            }
//        }
//    }
//
//}
//int main()
//{
//    //把数组排成升序
//    int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    //冒泡排序 对数组排序
//    bubble_sort(arr,sz);
//    //打印结果验证
//    int i = 0;
//    for (i = 0; i < sz; i++)
//        printf("%d ", arr[i]);
//    return 0;
//}


//数组名确实能表示首元素地址
// 但是有两个例外:
// 1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小
// 2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址
//
//int main()
//{
//    int arr[10] = { 0 };
//    printf("%p\n", arr);//首元素地址
//    printf("%p\n", arr+1);//第二个元素地址
// 
//    printf("%p\n", &arr[0]);//首元素地址
//    printf("%p\n", &arr[0]+1);//第二个元素地址
// 
//    printf("%p\n", &arr);//数组的地址
//    printf("%p\n", &arr+1);//数组的地址+数组大小后的地址
// 
//    
//    //int n = sizeof(arr);//40
//    //printf("%d\n", n);
//    
//    return 0;
//}

//二位数组的数组名也表示首元素地址
int main()
{
    int arr[3][4];

    printf("%d\n", sizeof(arr) / sizeof(arr[0]));//计算出是行数 数组大小/一行大小
    printf("%d\n", sizeof(arr[0]) / sizeof(arr[0][0]));//列数大小 一行大小/首字母大小

    printf("%p\n", arr);//这里打印的是 首字母/首行 的地址
    printf("%p\n", arr + 1);//这里打印的是第二行首字母
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值