回 帖 发 新 帖 刷新版面

主题:排序算法讨论(加30分)

  有没有什么除基本的一些排序外,
  有没有什么稀奇,奇妙的排序算法(效率不一定要高)。
  加30分[em5]

  注意:是算法哦![em1]

回复列表 (共21个回复)

11 楼

hush排序:
首先建立一个很长的数组做hush表,表中元素类型为布尔型,初始值为false.然后读入数据,把hush表中下标等于这个数的元素赋值为true.然后:
for i:=1 to n do
  if hush[i] then write(i,' '); //从小到大

for i:=n downto 1 do
  if hush[i] then write(i,' '); //从大到小

这个排序算法希奇吧?时间效率很高,不过空间效率就......呵呵


下面是代码:
假设读入十个数,范围是1~100
{init}
for i:=1 to 100 do hush[i]:=false;
{sort}
for i:=1 to 10 do
begin
  read(x);
  hush[x]:=true;
end;
{output}
for i:=1 to 100 do
  if hush[i] then write(i,' '); //从小到大
for i:=100 downto 1 do
  if hush[i] then write(i,' '); //从大到小

12 楼

可以建立一个数组,0——————10000,每读一个就在数组上作记录,最后按顺序输出数组上作记录的上标

13 楼

[quote]可以建立一个数组,0——————10000,每读一个就在数组上作记录,最后按顺序输出数组上作记录的上标[/quote]

靠...这不就是我说的HUSH排序?

14 楼

选择排序
var
 a:array[1..n]of integer;
  t,i,j:integer;
begin
 for i:=1 to n-1 do 
  for j:=i+1 to n do 
    if a[i]<a[j]  then //升序(a[i]>a[j])
   then  
    begin
         t:=a[i];
        a[i]:=a[j];
        a[j]:=t;

  end;
for i:=1 to n do 
  write(a[i]);
end. 
冒泡排序
var
 a:array[1..n]of integer;
  t,i,j:integer;
begin
 for i:=1 to n-1 do 
  for j:=1 to i+1 do 
    if a[i]<a[j]  then //升序(a[i]>a[j])
   then  
    begin
         t:=a[i];
        a[i]:=a[j];
        a[j]:=t;

  end;
for i:=1 to n do 
  write(a[i]);
end. 

______________________________________________________________________

[em1][em1][em9][em9][em9]

15 楼

冒泡
选排
堆排
桶排
树排
快排
对8000个随机自然数进行排序,桶排最快!!!!1

16 楼

选择排序!
堆排序!
冒泡排序!
插入排序!
二分排序!
快速排序!
希尔排序!
…………………………………………………………

17 楼

堆排序??
我从来没听说过啊??
能否赐教?

18 楼

堆排序就是建立一个二叉树,要求每个节点大于它的左子节点和小于它的右子节点,最后用前序输出,就是结果了

19 楼

[quote]堆排序就是建立一个二叉树,要求每个节点大于它的左子节点和小于它的右子节点,最后用前序输出,就是结果了[/quote]

按照你的说法的话,应该是按中序输出吧?
左子节点<父亲节点<右子节点
很明显应该中序吧!

所以这并不是堆排序的思路.具体思路可以查书或baidu上搜.

20 楼

堆排序很久没用过,记错了

我来回复

您尚未登录,请登录后再回复。点此登录或注册