题目描述:
给定一个 n 个元素整型数组 nums ,请使用冒泡排序算法将数组重新排序,并将数组依次打印出来。
示例
输入: nums = [34,56,12,14,99,23],
输出: 12 14 23 34 56 99
题目分析
- 建立外循环,其中循环条件为i<sz-1,每个数组元素除了自己都要比较一遍;
- 建立内循环,其中循环条件为j<sz-1-i,外循环每比较一次后,内循环次数减一次,即j循环次数和i相关联;
- 编写交换函数,采用地址传递的方法,交换数组中的元素,简化算法;
- 可以使用bool值优化算法,发现后面不需要排序后直接跳出当前循环;
- 注意数组元素大小要在主函数中进行计算,因为在主函数中数组名保留了其原始的长度信息,而作为参数传递后会被隐式转换为指针,实际变成了指针的大小而不是数组的大小。
代码实现:
void Swap(int* a,int* b)
{
int tmp = *a;
*a = *b;
*b = *tmp;
}
void BubbleSort(int* arr,int sz)
{
for(int i = 0; i < sz-1; i++)
{
bool exchange = 1;
for(int j=0; j< sz-1-i;j++)
{
if(arr[j]>arr[j+1])
{
Swap(&arr[j],&arr[j+1]);
exchange = 0;
}
}
if(exchange==1)
break;
}
}
int main()
{
int nums[] = {34,56,12,14,99,23};
int sz = sizeof(nums)/sizeof(nums[0]);
BubbleSort(nums,sz);
for(int i = 0; i<sz;i++)
{
printf("%d ",nums[i]);
}
return 0;
}