十二、数组(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.思维导图

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 05:34:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 05:34:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 05:34:04       45 阅读
  4. Python语言-面向对象

    2024-07-21 05:34:04       55 阅读

热门阅读

  1. Spring Boot中的404错误:原因、影响及处理策略

    2024-07-21 05:34:04       21 阅读
  2. Perl并发编程秘籍:线程间通信的艺术

    2024-07-21 05:34:04       16 阅读
  3. PyTorch LSTM 单步、多步时间预测

    2024-07-21 05:34:04       18 阅读
  4. Android 14 适配之— BluetoothAdapter、JobScheduler、 Tiles

    2024-07-21 05:34:04       20 阅读
  5. 厦门大学学报哲学社会科学版

    2024-07-21 05:34:04       16 阅读
  6. 【机器学习】FlyFlowerSong【人工智能】资源指南

    2024-07-21 05:34:04       17 阅读
  7. 【19】成绩计算

    2024-07-21 05:34:04       13 阅读
  8. 开源的语音合成工具_ChatTTS_用法及资源

    2024-07-21 05:34:04       18 阅读
  9. C++基础入门(一)(命名空间,输入输出,缺省参数)

    2024-07-21 05:34:04       15 阅读