using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Project4
{
class Program
{
static void Main(string[] args)
{
//主程序入口
//数组空间的定义方法
//int[] arr = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] arr = { 10, 32, 42, 55, 77, 3, 89, 13, 11, 100 };
//数组翻转
// reversed(arr);
//指定位置加入指定值
//insert(arr, 0, 1111);
//指定数组删除指定值
//deleteValue(arr, 115);
deleteValue2(arr,77);
//删除指定下标的元素
//deletespecificSUB(arr, 0);
//加入一个数组
//int[] brr = {11,11,11,99};
//insertArrdataTo(arr,2,brr);
//指定数值替换
//replace(arr, 77, 44);
//Console.WriteLine(indexof(arr,11));
// Console.WriteLine(lastIndexof(arr, 400));
//从小到大排列
// fromMintoMax(arr);
//删除,指定位置到指定位置的值
//deletekinddata(arr,0,2);
// deletekinddata2(arr, 0, 2);//调用
// 删除,指定位置指定长的元素
//deletecountdata(arr,0,2);
arrshow(arr);//经过上述变化,数组会变化
Console.ReadKey();//Console.ReadLine();
}
/// <summary>
/// 数组逆转
/// </summary>
/// <param name="arr">从外部传给的数组</param>
static void reversed(int[] arr)
{
//int i = (int)(arr.Length / 2);
//在数组中进行运算时,需要运算的次数:总长度的一半
for (int a = 0; a < arr.Length / 2; a++)
{
//借鉴于冒泡和选择法。即:选用一个中间变量,做临时的空间。
int t;
//将数组中倒数第一个(倒数第二个......)赋值给t。
t = arr[arr.Length - 1 - a];
//将对应的前半部分的值赋值给后部
arr[arr.Length - 1 - a] = arr[a];
//此时,地址名t内存的是对应的后部分值,赋值
arr[a] = t;
}
}
/// <summary>
/// 在数组指定位置处插入一个指定的值
/// </summary>由于数组长度不能改变,所以当值插入后,把后一个值覆盖掉
/// <param name="arr">传入的数组</param>
/// <param name="index">要插入的位置</param>
/// <param name="value">加入的数值</param>
static void insert(int[] arr,int index,int value)
//static void insert(int[] arr, index, value)错误地方:index value没有定义类型
{
//使用循环,倒叙方法
for(int i =arr.Length-1; i> index; i--)
{
//直接使用前面的数覆盖后边的值)
arr[i] = arr[i - 1];
}
//赋值,将要给的值赋予index位置
arr[index] = value;
}
/// <summary>
/// 删除数组中指定的值,变量自定义
/// </summary>由于数组长度不能改变,册除一个值后
/// 将后面所以值往前移,最后一个值改为0
/// <param name="arr"> </param>
/// <param name="value"> </param>
static void deleteValue(int[] arr, int value)
{
//循环整个数组
for (int i = 0; i <= arr.Length-1; i++)
{
//在数组中找到指定数值
if (arr[i] == value)
{
//从当前位置开始,用后一个值覆盖前一个
for (int j = i; j < arr.Length - 1; j++)
{
arr[j] = arr[j + 1];
}
}
//另一种方法,利用indexof。
else
{
//Console.WriteLine("删除失败,未找到!");
return;
}
}
//数组末尾赋值0
arr[arr.Length - 1] = 0;
}
//可以调用:
static void deleteValue2(int[] arr, int value)
{
//定义一个变量,存储或许的下标
int index = indexof(arr, value);
//删除改下标的值。为什么是index,而不是index++:因为,删除之后,index后边的一个值,就向前了一个格
deletespecificSUB(arr, index);
}
/// <summary>
/// 删除数组中指定下标的值,变量自定义
/// </summary>
/// <param name="arr"></param>
/// <param name="index"></param>
static void deletespecificSUB(int[] arr, int index)
{
//遍寻数组
for(int i = 0;i <= arr.Length - 1; i++)
{
//判断下标
if(i == index)
{
//从该处遍寻数组
for(int j =i;j< arr.Length - 1; j++)
{
//用后一个值覆盖前一个值
arr[j] = arr[j + 1];
}
}
}
//最后一个赋0
arr[arr.Length - 1] = 0;
}
/// <summary>
/// 在数组指定位置处,插入另一个数组的值
/// </summary>被插入的数组,此数组的长度一定要小于arr的长度
/// <param name="arr"> </param>
/// <param name="index">为插入的开始下标</param>
static void insertArrdataTo(int[] arr, int index,int [] brr)
{
//加限制条件if,覆盖问题。建立一个新的数组
//数组一和数组二的总长度小于数组一的长时
//先挪后运算
for(int i = index; i< index+brr.Length; i++)
{
//当要插入的数组元素和原数组元素的和长度大于原数组长
//将原数组元素向后移动
arr[i + brr.Length] = arr[i];//wu
//arr[i] = arr[i - brr.Length];
//填入数据
}
//wang:循环 放入数值。还要考虑插入的个数
for (int j = 0; j < brr.Length&&index<arr.Length; j++,index++)
{
arr[index] = brr[j];
}
}
/// <summary>
/// 把数组中的指定的值,换成指定的值
/// </summary>
/// <param name="arr"> 数组</param>
/// <param name="oldValue">要替换的数</param>
/// <param name="newValue">给予的数值</param>
static void replace(int[] arr, int oldValue, int newValue)
{
//遍寻数组中的所有元素
for(int i =0; i < arr.Length; i++)
{
//寻找
if(arr[i] == oldValue)
{
//在该处做替换
arr[i] = newValue;
}
}
}
/// <summary>
/// 返回数组总指定的值第一次出现的位置
/// </summary>
/// <param name="arr"> </param>
/// <param name="value"> </param>
/// <returns></returns>
static int indexof(int[] arr,int value)
{
for (int i = 0; i < arr.Length; i++)
{
//当if else后边仅一条语句时,可不用括号
//如果查到与外部给的数值相等的数,那么返回该下标
if (arr[i] == value) return i;
}
//若查询不到,返回-1;
return -1;
}
/// <summary>
/// 返回数组中指定的值,最后一次出现的位置
/// </summary>
/// <param name="arr"></param>
/// <param name="value"></param>
static int lastIndexof(int[] arr,int value)
{
//用逆序的思想,倒数的第一个,为正的最后一个
for(int i = arr.Length - 1; i >= 0; i--)
{
if(arr[i] == value)
{
//函数执行到这里直接返回了
return i;
}
}
//因为数组中的下标是从0开始。
return -1;//返回任何一个正整数均不合理
}
/// <summary>
/// 数组元素,由小到大排列
/// </summary>
/// <param name="arr"></param>
static void fromMintoMax(int[] arr)
{
//交换次数:应是两次循环 遍布
for (int i = 1; i < arr.Length - 1; i++)
{
for (int j = 0; j < arr.Length - i; j++)
{
int t;
if (arr[j] > arr[j + 1])
{
t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
}
/// <summary>
/// 删除数组中指定的某一段值,从指定下标删除到指定的下标
/// </summary>
/// <param name="arr"></param>
/// <param name="sIndex">开始删除的起始位置</param>
/// <param name="eIndex">删除的结束位置,但不包括结束位置的值</param>
static void deletekinddata(int[] arr,int sIndex,int eIndex)
{
//最后一位不包括,所以是eIndex > arr.Length。判断
if (sIndex < 0 || eIndex > arr.Length) return;
int temp = sIndex;
for (int j = eIndex; j < arr.Length; j++)
{
arr[temp] = arr[j];
//arr[sIndex] = arr[j];sIndex的值并没有发生变化
temp++;
// sIndex++;若直接使用,则其值发生变化,赋值循环无法正常使用
}
//判断清零的个数,进而赋值为零。
for (int x=arr.Length-1;x>= arr.Length-(eIndex-sIndex); x--)
{
arr[x] = 0;
}
}
/// <summary>
/// 末尾的元素依然删除了。
/// </summary>
/// <param name="arr"></param>
/// <param name="sIndex"></param>
/// <param name="eIndex"></param>
static void deletekinddata2(int[] arr, int sIndex, int eIndex)
{
if (eIndex < 0 || sIndex > arr.Length) return;
//i :表示要删除的个数
for(int i = 0;i< eIndex-sIndex;i++)
{
//deletespecificSUB:删除指定下标;删除一个数之后,数组中的数值会向前移动一格。
//那么删除的位置应该是sIndex
deletespecificSUB(arr, sIndex);
}
}
/// <summary>
/// 删除数组中指定个数的值,从指定位置删除,往后删除指定的个数
/// </summary>
/// <param name="arr"></param>
/// <param name="sIndex">删除的起始位置</param>
/// <param name="Length">总共要删除多少个,不包括最后一位</param>
static void deletecountdata(int[]arr,int sIndex, int Length)
{
for(int i =0; i < arr.Length; i++)
{
for(int j=sIndex + Length - 1;j >= sIndex;j--)
{
//arr[j] = 0;
for(int x= sIndex + Length - 1;x< arr.Length-1; x++)
{
int t;
t= arr[x + 1];
arr[x + 1] = arr[x];
arr[x] = t;
}
}
}
for(int y = arr.Length - 1; y >= arr.Length - Length; y--)
{
arr[y] = 0;
}
}
//显示数组中的所有的元素
static void arrshow(int[] arr) // 传入参数时,定义类型
{
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
}
}
}