十二、数组(2)

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

5.思维导图

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值