1.冒泡排序数组(升序)
冒泡排序:将一个整型数组排序(升序)
例:
10 9 8 7 6 5 4 3 2 1
9 10 8 7 6 5 4 3 2 1
9 8 10 7 6 5 4 3 2 1
......
9 8 7 6 5 4 3 2 1 10 //一次排序最终结果
10个元素,9趟比较
推论:
n个元素,一共n-1趟比较。
第1趟,比较n-1次
第2趟,比较n-2次
......
第m趟,比较n-m次
......
第n-1趟,比较1次
例:for(i=0;i<sz-1;i++)//n-1趟
{
for(j=0;j<sz-1-i;j++)//每趟n-m次,i = m -1
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
//冒泡排序数组(升序)
void bubble_sort (int arr [],int sz)
{
int i = 0;
int j = 0;
for(i=0;i<sz-1;i++)
{
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 [] = {99,888,70,50,5,44,3,2,10,0};
int i = 0;
int sz = sizeof(arr)/sizeof(arr[0]);
bubble_sort(arr,sz);
for(i=0;i<sz;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
2.冒泡排序数组pro
如果某趟比较,无交换位置,则已有序,直接跳出。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
//冒泡排序数组pro
void bubble_sort (int* arr,int sz)
{
int i = 0;
int j = 0;
for(i=0;i<sz-1;i++)
{
int flag = 1;
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 main()
{
int arr [] = {9,80,70,6,50,666,3,2,1,660};
int i = 0;
int sz = sizeof(arr)/sizeof(arr[0]);
bubble_sort(arr,sz);
for(i=0;i<sz;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
3.数组名的实质
数组作参数,在函数传参时,传的是数组首元素的地址。
实参:arr
形参:int arr [ ] 或者 int* arr
下标访问 arr++和解引用
数组接收 指针接收
数组名的实质是数组首元素的地址
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
//数组名的实质
int main()
{
int arr [] = {0,1,2,3,4,5,6,7,8,9};
printf("%p\n",arr);
printf("%p\n",&arr[0]);
printf("%d\n",*arr);
return 0;
}
4.数组名的例外
(1)sizeof(数组名)
数组名表示整个数组,计算的是整个数组的大小。
(2)&(数组名)
取出的是整个数组的地址,表示整个数组。
例:&arr 打印的是首元素的地址
&arr+1 跳出整个数组的地址,打印的是数组末元素地址的下一个地址
例:一个数组10个元素:以int型为例
0 1 2 3 4 5 6 7 8 9 x(&arr+1)
整个数组占40个地址大小,首元素和末元素的首地址差36个地址大小。
打印只打印元素首地址
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
//数组名的例外
int main()
{
int arr [] = {0,1,2,3,4,5,6,7,8,9};
printf("%d\n",sizeof(arr));
printf("%p\n",arr);
printf("%p\n",arr+1);
printf("%p\n",&arr[0]);
printf("%p\n",&arr[9]);
printf("%d\n",*arr);
printf("%p\n",&arr);
printf("%p\n",&arr+1);
return 0;
}