关于C#冒泡代码

来源:百度知道 编辑:UC知道 时间:2024/05/22 07:00:02
using System;
class maopao
{
static void Main()
{
int[] arr = new int[6];
int i, j,temp,k;
Console.WriteLine("输入5个数字:");
for (k=0; k< 5; k++)
{
arr[k]=Convert.ToInt32(Console.ReadLine());
}
for (i = 0; i <5; i++)
{
for (j = 0; j < 5-1; j++)
{
if (arr[j] < arr[i + 1])
{
temp = arr[j];
arr[j] = arr[i+1];
arr[i+1] = temp;
}
}
}

Console.WriteLine("排序后的是:");
for (i = 0; i < 5; i++)
Console.WriteLine("{0}", arr[i]);

}
}
这是我自己写的,输入5个数字,从小到大排列。我只要输入5个数字,为什么在初始化数组却要定义6个呢。定义5个的话,就会提示说超出数组限制。

for (i = 0; i <5//出错就在此处; i++)
{
for (j = 0; j < 5-1; j++)
{
if (arr[j] < arr[i + 1]) //当i=4时i+1=5此时用到arr[5],必须定义六个空间
{
temp = arr[j];
arr[j] = arr[i+1];
arr[i+1] = temp;
}
}
}
改为
for (i = 0; i <5-1; i++) //5个数,前四个定下拉第五个也定下了
{
for (j = i; j < 5; j++)
{ //从第i个开始比较选出最小的
if (arr[j] < arr[i]) //arr[i]就可以了
{
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}

恩int[5]

实际是int[0]---int[4]

if (arr[j] < arr[i + 1])
你这句i的值是小于5所以当i=4时arr[4 + 1]就超出范围了

int[] arr = new int[6]; 你这句话定义了数组的容量是6个