void bubble_sort(int sz,int arr[])
{
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 func()
{
int arr[]={9,8,7,6,5,4,3,2,1,0};
int i=0;
int sz=sizeof (arr)/sizeof (arr[0]);
bubble_sort(sz,arr);
for(i=0;i<sz;++i)
{
printf("%d ",arr[i]);
}
return 0;
}
学习笔记:冒泡排序是各种排序算法中最基础的,也是笔者曾经面试时因回答不上冒泡排序是什么而被劝退的面试题。
上述冒泡排序还可以优化:
void bubble_sort(int sz,int arr[])
{
int i=0;
for(i=0;i<sz-1;++i)
{
int flag=1;//假设本次要排序的数据已经有序
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;
flag=0;//本次排序的数据其实不完全有序
}
}
if(flag==1)
{
break;
}
}
}
int func()
{
int arr[]={9,8,7,6,5,4,3,2,1,0};
int i=0;
int sz=sizeof (arr)/sizeof (arr[0]);
bubble_sort(sz,arr);
for(i=0;i<sz;++i)
{
printf("%d ",arr[i]);
}
return 0;
}
Tips:break只能由于循环。
数组作为参数传递到函数,只是传的首位的地址。
int func()
{
int arr[]={9,8,7,6,5,4,3,2,1,0};
printf("%p\n",arr);
printf("%p\n",&arr[0]);
return 0;
}
二者输出的结果是一样的。
补充:
1.sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。
2.&数组名,取出的是数组的地址。&数组名,数组名表示整个数组。
除此1,2两种情况之外,所有的数组名都表示数组首元素的地址。