在 C# 中跨多个类使用数组和插入排序不起作用



我正在为类做一个作业,我需要在未排序的数组上使用插入排序,但它不会完全起作用。我起诉排序的算法要么将所有值更改为 0,要么全部更改为最后一个值 (96(,顶部为 0。 数组类的代码

using System;
namespace UnorderedArrayListNamespace
{
public class UnorderedArrayList
{
public int[] list;
protected int next;
// protected int Count;
public UnorderedArrayList()
{
list = new int[100];
next = 0;
}

public void insert(ref int item)
{
list[next] = item;
next++;
}
public void remove(ref int item)
{
if (next == 0)
{
}
else
{
//find value, if it exists
for (int i = 0; i < next; i++)
{
if (item.Equals(list[i]))
{
for (int j = i; j < next; j++) list[j] = list[j + 1];
next--;
break;
}
}
}
}
public void removeAll(ref int item)
{
}
public int[] InsertionSort(ref int item)
{
for (int i = 0; i < list.Length - 1; i++)
{
for (int j = i + 1; j > 0; j--)
{
if (list[j - 1] > list[j])
{
int temp = list[j - 1];
list[j - 1] = list[j];
list[j] = temp;
}
}
}
return list;
}
public void Minmax(ref int item)
{
int  min , max;
min = list[0];
max = list[0];
for (int i = 1; i < list.Length; i++)
{
if (min > list[i])
min = list[i];
if (max < list[i])
max = list[i];
}
Console.WriteLine("min:" + min);
Console.WriteLine("max:" + max);
}
public void print()
{
for (int i = 0; i < next; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine();
}
}
}

主类代码

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
UnorderedArrayList u = new UnorderedArrayList();
u.print();
int var = 7;
u.insert(ref var);
var = 12;
u.insert(ref var);
var = 5;
u.insert(ref var);
var = 5;
u.insert(ref var);
var = 5;
u.insert(ref var);
var = 96;
u.insert(ref var);
u.print();
var = 5;
u.remove(ref var);
u.print();
u.InsertionSort(ref var);
u.print();
u.Minmax(ref var);      
}  
}
}

更新以包括数组类的所有部分。如果这太长了,我很抱歉,这是我的第一篇文章,我想彻底。

根据评论请求,这是作业:

通过以下方式修改提供的类 UnorderedArrayList:

一个。 方法remove(( 通过移动列表的元素从列表中删除元素。 但是,如果要删除的元素位于列表的开头,并且列表相当大,则执行该操作可能需要大量计算机时间。 由于列表元素没有特定的顺序,因此您只需将列表中的最后一个元素复制到要删除的项的位置并减少列表的长度来删除该元素。

二. 方法 Remove 仅删除元素的第一次出现。 添加方法removeAll((,该方法将删除给定元素的所有出现次数。

三. 添加方法 min(( 和 max((,它们将返回列表中最小和最大的相应元素

d. 添加按顺序排列列表的插入排序方法。

e. 编写一个 Main(( 方法来彻底测试这些修改并证明正确性。

你来了。 在插入排序中,我首先添加了该项目,然后进行了排序。最小值是排序后列表中的第一项,最大值是最后一项。您的 MinMax 逻辑很好,但只是想让您知道一旦排序,就很容易获得最小值,最大值。

仔细查看排序以及如何完成,写下顺序或取消排序列表中的数字,并写下它们更改位置的位置。这有助于您理解逻辑。重要的是,你有i和j,两者都代表要比较的项目的位置。

7-12- 5- 5-96-5

5-12- 5- 5-96-7 (7 & 5 切换(

5- 5-12- 5-96-7 (12 和 5 切换( 等

此外,removeAll 是没有中断的相同代码。

使用系统;

namespace UnorderedArrayListNamespace
{
public class UnorderedArrayList
{
public int[] list;
protected int next;
// protected int Count;
public UnorderedArrayList()
{
list = new int[100];
next = 0;
}

public void insert(ref int item)
{
list[next] = item;
next++;
}
public void remove(ref int item)
{
//find value, if it exists
for (int i = 0; i < next; i++)
{
if (item.Equals(list[i]))
{
list[i] = list[next - 1];  //Move last item to empty slot
next--;
break; //break because we only remove first
}
}
}
public void removeAll(ref int item)
{
//find value, if it exists
for (int i = 0; i < next; i++)
{
if (item.Equals(list[i]))
{
list[i] = list[next - 1];  //Move last item to empty slot
next--;
}
}
}
public int[] InsertionSort(ref int item)
{
//First we add the item
insert(ref item);
for (int i = 0; i < next - 2; i++)
{
for (int j = next - 1; j > i; j--)
{
if (list[i] > list[j])
{
int temp = list[j];
list[j] = list[i];
list[i] = temp;
}
}
}
return list;
}
public int Min()
{
if (next == 0) throw new Exception("No element is list, cannot get minimum");
return list[0];
}
public int Max()
{
if (next == 0) throw new Exception("No element is list, cannot get maximun");
return list[next - 1];
}

public void print()
{
for (int i = 0; i < next; i++)
{
Console.Write("{0} ", list[i]);
}
Console.WriteLine();
}
}

class Program
{
static void Main(string[] args)
{
UnorderedArrayList u = new UnorderedArrayList();
u.print();
int var = 7;
u.insert(ref var);
var = 12;
u.insert(ref var);
var = 5;
u.insert(ref var);
var = 5;
u.insert(ref var);
var = 5;
u.insert(ref var);
var = 96;
u.insert(ref var);
u.print();
var = 5;
u.remove(ref var);
u.print();
u.InsertionSort(ref var);
u.print();
Console.WriteLine("Minimum of sortedlist is {0}", u.Min());
Console.WriteLine("Maximum of sortedlist is {0}", u.Max());
u.removeAll(ref var);
u.print();
Console.ReadKey();
}
}
}

最新更新