一维数组(排序)

定义及元素引用

一维数组的定义为:类型说明符  数组名[常量表达式]; 如int a[10];

数组的命名规则和变量名相同,定义数组时,需要指定数组中元素的个数,"[]"中的常量表达式用来表示元素的个数,即数组长度。

数组元素的表现形式为数组名[下标],下标可以是整型常量或整型表达式。

92ae2fc554114289b6952dd34aede977.png

特点:

1.单一性:数组中各元素所占字节大小都相同。

2.有序性:下标小的元素总靠前,放在下标大的元素之前(地址)。

3.连续性:各元素之间在内存中存放时没有间隔。

选择排序:在数组合适的位置上放上合适的数。

求最大值和次最大值

#include<limits.h>
int main(void)
{
	int a[] = {10,2,3,4,5,6,7,8,9,0};
	int len = sizeof(a) / sizeof(a[0]);
	int max, i;
	
	max = a[0];
	for(i = 1;i < len;++i)
	{
		if(max < a[i])
		{
			max = a[i];
		}
	}

	printf("%d\n", max);
	
	int max1 = INT_MIN;
	for(i = 0;i < len;++i)
	{
		if(max1 < a[i] && a[i] != max)
		{
			max1 = a[i];
		}
	}

	printf("%d\n", max1);



	return 0;
}

逆序

int main(void)
{
	int a[] = {1,2,3,4,5,6,7,8,9,0};
	int len = sizeof(a) / sizeof(a[0]);
	int i;

	for(i = 0;i < len / 2;++i)
	{
		int t;
		t = a[i];
		a[i] = a[len - i - 1];
		a[len - i - 1] = t;
	}

	for(i = 0;i < len;++i)
	{
		printf("%d\n", a[i]);
	}
	

	return 0;
}

选择排序

 

int main(void)
{
	int a[] = {-1,2,-3,4,-5,6,-7,8,-9,0};
	int len = sizeof(a) / sizeof(a[0]);
	int i, j;

	for(i = 0;i < len - 1;++i)
	{
		for(j = i + 1;j < len;++j)
		{
			if(a[i] < a[j])
			{
				int t;
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
	}
	
	for(i = 0;i < len;++i)
	{
		printf("%d\n", a[i]);
	}

	return 0;
}

冒泡排序

int main(void)
{
	int a[] = {-1,2,-3,4,-5,6,-7,8,-9,0};
	int len = sizeof(a) / sizeof(a[0]);
	int i, j;

	for(j = len - 1;j > 0;--j)
	{
		for(i = 0;i < j;++i)
		{
			if(a[i] > a[i + 1])
			{
				int t;
				t = a[i];
				a[i] = a[i + 1];
				a[i + 1] = t;
			}
		}
	}

	for(i = 0;i < len;++i)
	{
		printf("%d\n", a[i]);
	}


	return 0;
}

插入排序

int main(void)
{
	int a[] = {-1,2,-3,4,-5,6,-7,8,-9,0};
	int len = sizeof(a) / sizeof(a[0]);
	int i, j;
	

	for(i = 1;i < len;++i)
	{
		int t = a[i];
		j = i;
		while(j > 0 && a[j - 1] > t)
		{
			a[j] = a[j - 1];
			--j;
		}

		a[j] = t;
	}

	for(i = 0;i < len;++i)
	{
		printf("%d\n", a[i]);
	}

	return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值