在 C# 中跨多个 类 使用数组和插入排序将不起作用
Using arrays across multiple classes in C# and insertion sort won't work
我正在为 class 进行作业,其中我需要对未排序的数组使用插入排序,但它不太有效。我为排序起诉的算法要么将所有值更改为 0,要么将所有值更改为最后一个值 (96),顶部为 0。
数组代码 class
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();
}
}
}
主要代码 class
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);
}
}
}
已更新以包含阵列的所有部分 Class。很抱歉,如果这太啰嗦了,这是我的第一个 post,我想说的很透彻。
根据评论请求,这里是作业:
通过以下方式修改提供的 class UnorderedArrayList:
一个。 remove() 方法通过移动列表的元素从列表中删除一个元素。但是,如果要删除的元素位于列表的开头并且列表相当大,则执行该操作可能会花费大量计算机时间。因为列表元素没有特定的顺序,您可以通过复制列表中要删除的项目位置的最后一个元素并减少列表的长度来简单地删除元素。
b。 remove 方法仅删除第一次出现的元素。添加 removeAll() 方法,该方法将删除所有出现的给定元素。
c。添加方法 min() 和 max() ,它们将 return 列表中的最小和最大元素
d.添加一个插入排序方法,使列表按顺序排列。
e。编写一个 Main() 方法来彻底测试这些修改并证明其正确性。
给你。在 InsertionSort 中,我首先添加了项目,然后进行了排序。最小值是列表中排序后的第一项,最大值是最后一项。你的 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();
}
}
}
我正在为 class 进行作业,其中我需要对未排序的数组使用插入排序,但它不太有效。我为排序起诉的算法要么将所有值更改为 0,要么将所有值更改为最后一个值 (96),顶部为 0。 数组代码 class
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();
}
}
}
主要代码 class
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);
}
}
}
已更新以包含阵列的所有部分 Class。很抱歉,如果这太啰嗦了,这是我的第一个 post,我想说的很透彻。
根据评论请求,这里是作业:
通过以下方式修改提供的 class UnorderedArrayList:
一个。 remove() 方法通过移动列表的元素从列表中删除一个元素。但是,如果要删除的元素位于列表的开头并且列表相当大,则执行该操作可能会花费大量计算机时间。因为列表元素没有特定的顺序,您可以通过复制列表中要删除的项目位置的最后一个元素并减少列表的长度来简单地删除元素。
b。 remove 方法仅删除第一次出现的元素。添加 removeAll() 方法,该方法将删除所有出现的给定元素。
c。添加方法 min() 和 max() ,它们将 return 列表中的最小和最大元素
d.添加一个插入排序方法,使列表按顺序排列。
e。编写一个 Main() 方法来彻底测试这些修改并证明其正确性。
给你。在 InsertionSort 中,我首先添加了项目,然后进行了排序。最小值是列表中排序后的第一项,最大值是最后一项。你的 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();
}
}
}