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;
}