枚举排序的程序

枚举排序的程序,第1张

using System

namespace scm

{

class Student

{

private int id

private string name

private float score

public int Id

{

get

{

return id

}

set

{

id=value

}

}

public string Name

{

get

{

return name

}

set

{

name=value

}

}

public float Score

{

get

{

return score

}

set

{

score=value

}

}

}

class StudentCollectionManager

{

System.Collections.Hashtable ht=new System.Collections.Hashtable()

public void Add(Student stu)

{

ht.Add(stu.Id,stu)

}

public voidDisplay()

{

System.Collections.ArrayList al=new System.Collections.ArrayList()

System.Collections.IDictionaryEnumerator e=ht.GetEnumerator()

Student ss=new Student()

while(e.MoveNext())

{

ss=(Student)e.Value

al.Add(ss.Score)

}

al.Sort()

al.Reverse()

e.Reset()

Console.WriteLine("学号姓名成绩\n")

for(int i=0i<al.Counti++)

{

while(e.MoveNext())

{

ss=(Student)e.Value

if(ss.Score ==(float)al[i])

{

Console.WriteLine(" "+ss.Id+""+ss.Name +""+ss.Score )

}

}

e.Reset()

}

}

}

class Test

{

static void Main(string[] args)

{

Student s1=new Student()

Student s2=new Student()

Student s3=new Student()

s1.Id=1

s1.Name="张华"

s1.Score=89

s2.Id=2

s2.Name="李丽"

s2.Score=79

s3.Id=3

s3.Name="王红"

s3.Score=90.5f

StudentCollectionManager scm=new StudentCollectionManager()

scm.Add(s1)

scm.Add(s2)

scm.Add(s3)

scm.Display()

Console.ReadLine()

}

}

}

枚举排序哈希表

枚举法是利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。

基本信息

中文名:枚举法

外文名:Enumeration method

定义:逐个考察了某类事件的所有可能

借助:计算机运算速度快精确度高特点

结构:while循环

算法:二进制加法,此时需要数组来帮忙

简介

枚举法是利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。

在 数学和 计算机科学理论中,一个集的 枚举是列出某些有穷序列集的所有成员的 程序,或者是一种特定类型对象的 计数。这两种类型经常(但不总是)重叠。

特点

将问题的所有可能的答案一一 列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。例如:找出1到100之间的素数,需要将1到100之间的所有 整数进行判断。

枚举算法因为要列举问题的所有可能的答案,所有它具备以下几个特点:

1、得到的结果肯定是正确的;

2、可能做了很多的无用功,浪费了宝贵的时间,效率低下。

3、通常会涉及到求 极值(如最大,最小,最重等)。

4、数据量大的话,可能会造成时间崩溃。

结构

枚举算法的一般结构:while 循环。

首先考虑一个问题:将1到100之间的所有整数转换为 二进制数表示。

算法一

for i:=1 to 100 do begin

将i转换为 二进制,采用不断除以2, 余数即为转换为2进制以后的结果。一直除商为0为止。

end

算法二

二进制加法,此时需要数组来帮忙。

program p

var a:array[1..100] of integer{用于保存转换后的二进制结果}

i,j,k:integer

begin

fillchar(a,sizeof(a),0){100个数组元素全部初始化为0}

for i:=1 to 100 do begin

k:=100

while a[k]=1 do dec(k){找高位第一个为0的位置}

a[k]:=1{找到了立刻赋值为1}

for j:=k+1 to 100 do a[j]:=0{它后面的低位全部赋值为0}

k:=1

while a[k]=0 do inc(k){从最高位开始找不为0的位置}

write('(',i,')2=')

for j:=k to 100 do write(a[j]){输出转换以后的结果}

writeln

end

end.

枚举法,常常称之为 穷举法,是指从可能的集合中一一枚举各个元素,用题目给定的约束条件判定哪些是无用的,哪些是有用的。能使命题成立者,即为问题的解。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7773314.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存