排序是我们平常代码中经常用到的一项功能。排序有很多种方法,如冒泡排序、选择排序、插入排序、快速排序等等。今天我们介绍一种排序的方法,叫做冒泡排序。
冒泡排序的思路两两相邻元素进行比较,有可能的话需要交换,全部比较一次(称为一趟冒泡排序),就排好了最后一个数字的位置,一趟冒泡排序,搞定一个数字,一共有n个数字,就全部比较n-1次。
冒泡排序的代码void Sort(int arr[], int sz)
{//趟数
int i = 0;
for (i = 0; i< sz - 1; i++)
{//一趟冒泡排序
int j = 0;
for (j = 0; j< sz - 1 - i; j++)
{if(arr[j] >arr[j + 1])
{int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main()
{//整形数据
int arr[] = {3,1,4,2,9,8,6,7,0,5 };
int sz = sizeof(arr) / sizeof(arr[0]);
//写一个函数,对数组进行排序
Sort(arr, sz);
int i = 0;
for(i = 0; i< sz; i++)
{printf("%d ", arr[i]);
}
return 0;
}
5、数组名至此,我们引出了一个问题:数组名到底代表着什么呢?
在以下两种情况下,数组名表示首元素的地址,其他所有情况下,数组名都表示整个元素:
(1)sizeof(数组名)
(2)&数组名
例如:
#includeint main()
{int arr[10] = {0 };
printf("%p\n", arr);
return 0;
}
//此时数组名是个地址
#includeint main()
{int arr[10] = {0 };
printf("%p\n", arr);
printf("%p\n", &arr[0]);
return 0;
}
//两个地址是一样的,说明数组名是数组首元素的地址
#includeint main()
{int arr[10] = {0 };
printf("%p\n", arr);
printf("%d\n" ,sizeof(arr));//这里不是4/8
return 0;
}
//1、sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节
//2、&数组名,这里的数组名也表示整个数组,&取出的是数组的地址
//除了这两种情况,其他所有的数组名都是首元素的地址
值得一提的是,尽管数组名表示不同的含义(数组首元素地址和整个数组地址),但它们仍然可能相等。
比如:
#includeint main()
{int arr[10] = {0 };
printf("%p\n", arr);//首元素地址
printf("%p\n", &arr[0]);//首元素地址
printf("%p\n", &arr);//整个数组的地址
return 0;
}
//这里三个打印的地址是一样的
//原因:整个数组的地址也是指向第一个元素的
//区别:&arr+1表示的是跳过整个数组,arr+1和&arr[0]+1表示跳过数组的首元素
//相似的,指针+1跳过几个字节也是和指针类型有关的
6、数组实例两个数组使用的例子,可以参考我之前的两篇博客:
三子棋小游戏
扫雷小游戏
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧