VS2017学习C++基础七(一维数组的排序、插入和删除)

一维数组

// chapter07a02数组.cpp
//熟练使用一位数组解决实际问题(标志符、数组元素、元素下标、元素类型)
//掌握二维数组的使用
//使用数组实现常用算法
#include "pch.h"
#include <iostream>
using namespace std;

int main()
{
	const int N = 5;  //常量
	int nums[N] = { 12,123,'C',123 };
	cout << nums[2] << endl;
	int num1[] = { 12,123,true ,123 };
	cout << num1[2] <<endl;
	int days[100] = {};
	cout << days[2];
}

eg1:输入数组内容并打印

#include "pch.h"
#include <iostream>
using namespace std;

int main()
{
	//求数组中的最大值和最小值,并输出对应下标
	int nums[] = {8,54,65,84,52};
	int numsLens = sizeof(nums) / sizeof(int); //计算出数组的长度
	int max = nums[0];  //最大值
	int min = nums[0]; 
	int maxIndex = 0;  //最大值下标
	int	minIndex = 0;
	
	for (int i = 0; i < numsLens; i++)
	{
		if (max < nums[i])
		{
			max = nums[i];
			maxIndex = i;
		}
		if (min > nums[i])
		{
			min = nums[i];
			minIndex = i;
		}
	}
	cout << "数组最大值为:"<< max << " "<< "下标为:" << maxIndex << endl;
	cout << "数组最小值为:" << min << " " << "下标为:" << minIndex << endl;
}

结果为:

数组最大值为:84 下标为:3
数组最小值为:8 下标为:0

eg2:冒泡排序:循环录入5个整型数字,进行降序排列后输出结果

// chapter08a01数组.cpp 

#include "pch.h"
#include <iostream>
using namespace std;

int main()
{
	//循环录入5个整型数字,进行降序排列后输出结果
	//方案1:使用冒泡排序
	// 第一轮比较的次数:数组的总长度-1
	//下一轮比上一轮比较的次数少一次
	int nums[] = {12,45,56,878,2};
	int temp;
	int numsLens = sizeof(nums) / sizeof(int); //计算出数组的长度
	cout << "排序前的结果为:" ;
	for (int i = 0; i < numsLens; i++)
	{
		cout << nums[i] << '\t';
	}

	//外层循环控制比较的轮数
	for (int i = 0; i < numsLens -1 ; i++)
	{
		//内层循环控制每轮的比较和交换
		for (int j = 0; j < 4 - i; j++)
		{
			if (nums[j] < nums[j + 1])
				//交换
			{
				temp = nums[j];
				nums[j] = nums[j + 1];
				nums[j + 1] = temp;
			}	
		}
	}
	cout << endl;
	cout << "排序后的结果为:";
	for (int i = 0; i < numsLens; i++)
	{
		cout << nums[i] << '\t';
	}
}

eg3:选择排序:循环录入5个整型数字,进行降序排列后输出结果

#include "pch.h"
#include <iostream>
using namespace std;

int main()
{
	//循环录入5个整型数字,进行降序排列后输出结果
	//方案2:使用选择排序
	
	int nums[] = {12,45,56,878,2};
	int temp;  //临时变量
	int numsLens = sizeof(nums) / sizeof(int); //计算整型数组的长度
	cout << "排序前的结果为:" ;
	for (int i = 0; i < numsLens; i++)
	{
		cout << nums[i] << '\t';
	}
	int min = nums[0];//假设最小值为数组里的第一个元素
	int minIndex = 0;//最小值的初始下标为0

	
	for (int i = 0; i < numsLens ; i++)
	{
		min = nums[i];
		minIndex = i;

		for (int j = i + 1; j < numsLens ; j++)
		{
			if (nums[j] < min)
			{
				min = nums[j];
				minIndex = j;
			}	
		}
		//交换
		if (minIndex > i)
		{
			temp = nums[minIndex];
			nums[minIndex] = nums[i];
			nums[i] = temp;
		}
	}

	cout << endl;
	cout << "排序后的结果为:";
	for (int i = 0; i < numsLens; i++)
	{
		cout << nums[i] << '\t';
	}

	//逆序
	for (int i = 0; i < numsLens / 2; i++)
	{
		temp = nums[i];
		nums[i] = nums[numsLens - i - 1];
		nums[numsLens - i - 1] = temp;
	}
	cout << endl;
	cout << "逆序后的结果为:";
	for (int i = 0; i < numsLens; i++)
	{
		cout << nums[i] << '\t';
	}
}

在这里插入图片描述
eg4:数组的排序、插入和删除

#include "pch.h"
#include <iostream>
using namespace std;

int main()
{

	//排序
	double power[99];
	int powerCount = 0; // 当前数组中的元素个数

	power[powerCount++] = 71;
	power[powerCount++] = 56;
	power[powerCount++] = 41;
	power[powerCount++] = 32;
	power[powerCount++] = 14;

	cout << "排序前的结果为:";
	for (int i = 0; i < powerCount; i++)
	{
		cout << power[i] << '\t';
	}
	cout << endl;


	//从大到小排序
	double temp;
	for (int i = 0; i < powerCount; i++)
	{
		for (int j = 0; j < powerCount - i - 1; j++)
		{
			if (power[j] < power[j + 1])
			{
				temp = power[j];
				power[j] = power[j + 1];
				power[j + 1] = temp;
			}
		}
	}
	cout << "排序后的结果为:";
	for (int i = 0; i < powerCount; i++)
	{
		cout << power[i] << '\t';
	}
	cout << endl;


	//插入元素(插入数值之后,仍是有序的)
	double insertPower; //要插入的数值
	int insertIndex = powerCount;  //默认插入到最后一个位置
	cout << "请输入要插入的数值:";
	cin >> insertPower;
	//1.把新数值放在数组的末尾,重新进行排序
	//1.找到第一个比插入数组大的位置 insertIndex
	for (int i = 0; i < powerCount; i++)
	{
		if (insertPower > power[i])
		{
			insertIndex = i;
			break;
		}
	}
	//2.从最后一个元素开始,将数值复制到后一个元素中
	for (int i = powerCount - 1; i >= insertIndex; i--)
	{
		power[i + 1] = power[i];
	}

	//3.将要插入的数字赋值给下标为insertIndex的元素
	power[insertIndex] = insertPower;
	//4.将数组的总长度加1
	powerCount++;
	cout << "插入后的结果为:";
	for (int i = 0; i < powerCount; i++)
	{
		cout << power[i] << '\t';
	}
	cout << endl;


	//删除元素
	//1.找到要删除的目标
	double deletePower;
	int deleteIndex = -1;
	cout << "请输入要删除的数值:";
	cin >> deletePower;
	for (int i = 0; i < powerCount; i++)
	{
		if (deletePower == power[i])
		{
			deleteIndex = i;
			break;
		}
	}
	if (deleteIndex == -1)
	{
		cout << "没有找到要删除的数字!" << endl;
	}
	else
	{
		//2.从找到的下标开始,后面的一个元素赋值给前面的一个元素
		for (int i = deleteIndex; i < powerCount - 1; i++)
		{
			power[i] = power[i + 1];
		}
		//3.总长度 -1
		powerCount--;
		cout << "删除后的结果为:";
		for (int i = 0; i < powerCount; i++)
		{
			cout << power[i] << '\t';
		}
		cout << endl;
	}
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值