关于二维数组排序的问题,up有分

时间:2022-08-29 04:19:15
二维数组是这样定义的
 type
    Info = record
    IDCard: string;
    SignDate: string;
  end;
 
 A : array of Info;

这是一个选择排序算法

 procedure Sort(var A: array of Info);
    var
      I, J : Integer;
      T:MuliIDCardInfo;
    begin
      for I := Low(A) to High(A) - 1 do
        for J := High(A) downto I + 1 do
          if A[I].IDCard>A[J].IDCard then
          begin
            T := A[I];
            A[I] := A[J];
            A[J] := T;
          end;
    end;

数组中IDCard会有相同的记录情况,而且很多,所以我必须再根据SignDate
排一下序,同时再统计一下IDCard相同的个数。
有点像 Select Distinct IDCard From .......

我现在的困惑是,怎样 根据 IDCard,同时又根据SignDate,排序?

现在我只能根据 IDCard排序~~~ up有分

17 个解决方案

#1


先根据SignDate排序,再根据IDCard排序,就是你要的结果。

#2


真的?我试一下先~

#3


可以吧数据输到数据库中,用SQL语句完成不就可以了

#4


up

#5


chenchangfu(小虾): 如果能这样,我早就这样了~~
Select Distinct *
from 
order by 

我肯定想这样做啊~~~

#6


procedure Sort(var A: array of Info;var B: array of Info;);
var
  I, J : Integer;
  T:MuliIDCardInfo;
begin
  for I := Low(A) to High(A) - 1 do
    for J := High(A) downto I + 1 do
      if A[I].IDCard>A[J].IDCard then
      begin
        T := A[I];
        A[I] := A[J];
        A[J] := T;
      end;
    end;
  end;
  for I := Low(B) to High(B) - 1 do
    for J := High(B) downto I + 1 do
      if B[I].IDCard>B[J].IDCard then
      begin
        T := B[I];
        B[I] := B[J];
        B[J] := T;
      end;
    end;
  end;
end;

不就可以了吗,当然,参数B的优先权会大。

#7


同意d983074(d983074) 的意见, 但后一次排序(对IDCard) 要用稳定排序

#8


up

#9


upup

#10


我有java的算法你要不要?

#11


Wally_wu(不想再写代码) : 老大,你看清楚我的问题了吗?我真想晕你~~
 我说的不是两个数组的排列啊~~我是二维数组啊~~唉~

snake_eye(黄昏深处的白骨盾牌):要,谢谢~~

我的mail our169@163.com

其他同志想要的发邮件给我,等snake_eye(黄昏深处的白骨盾牌)发给我,
我就转发给你们。
标题 二维数组排序,否则我会视为垃圾邮件,嘿嘿,没有办法。

#12


procedure Sort(var A: array of Info);
    var
      I, J : Integer;
      T:MuliIDCardInfo;
      Count : Array of integer;   //动态数组怎么用我忘了
    begin
      for ....
        Count[I]:=1;

      for I := Low(A) to High(A) - 1 do
        for J := High(A) downto I + 1 do
          if A[I].IDCard>A[J].IDCard then
          begin
            T := A[I];
            A[I] := A[J];
            A[J] := T;
          end;
          if A[I].IDCard=A[J].IDCard then
            if A[I].SingleDate>A[I].SingleDate
            begin
              Count[I]:= Count[I]+1;
              T := A[I];
              A[I] := A[J];
              A[J] := T;
            end;
    end;


PS:  这是二维数组吗? 不要乱说

#13


哪有那么麻烦。我有一个非常简单的方法:
不就是String吗?看你的代码,IDCard应当是一个最大长度一定的String吧。比如说20个字符(足够大了吧。当然最好要确定最大长度,否则我的方法没有用)。
排序的时候设置一个S,然后将IDCard和SignDate相加,然后将相加的数据进行比较(如果IDcard长度不是最大长度,一律补空格)。

#14


up

#15


jufeng_zhu(老猪):似乎不错,呵呵~~想一想有道理~

#16


up

#17


up    up   upupupup
up    up   up      up
up    up   upupupup
up    up   up
up    up   up
upupupup   up

#1


先根据SignDate排序,再根据IDCard排序,就是你要的结果。

#2


真的?我试一下先~

#3


可以吧数据输到数据库中,用SQL语句完成不就可以了

#4


up

#5


chenchangfu(小虾): 如果能这样,我早就这样了~~
Select Distinct *
from 
order by 

我肯定想这样做啊~~~

#6


procedure Sort(var A: array of Info;var B: array of Info;);
var
  I, J : Integer;
  T:MuliIDCardInfo;
begin
  for I := Low(A) to High(A) - 1 do
    for J := High(A) downto I + 1 do
      if A[I].IDCard>A[J].IDCard then
      begin
        T := A[I];
        A[I] := A[J];
        A[J] := T;
      end;
    end;
  end;
  for I := Low(B) to High(B) - 1 do
    for J := High(B) downto I + 1 do
      if B[I].IDCard>B[J].IDCard then
      begin
        T := B[I];
        B[I] := B[J];
        B[J] := T;
      end;
    end;
  end;
end;

不就可以了吗,当然,参数B的优先权会大。

#7


同意d983074(d983074) 的意见, 但后一次排序(对IDCard) 要用稳定排序

#8


up

#9


upup

#10


我有java的算法你要不要?

#11


Wally_wu(不想再写代码) : 老大,你看清楚我的问题了吗?我真想晕你~~
 我说的不是两个数组的排列啊~~我是二维数组啊~~唉~

snake_eye(黄昏深处的白骨盾牌):要,谢谢~~

我的mail our169@163.com

其他同志想要的发邮件给我,等snake_eye(黄昏深处的白骨盾牌)发给我,
我就转发给你们。
标题 二维数组排序,否则我会视为垃圾邮件,嘿嘿,没有办法。

#12


procedure Sort(var A: array of Info);
    var
      I, J : Integer;
      T:MuliIDCardInfo;
      Count : Array of integer;   //动态数组怎么用我忘了
    begin
      for ....
        Count[I]:=1;

      for I := Low(A) to High(A) - 1 do
        for J := High(A) downto I + 1 do
          if A[I].IDCard>A[J].IDCard then
          begin
            T := A[I];
            A[I] := A[J];
            A[J] := T;
          end;
          if A[I].IDCard=A[J].IDCard then
            if A[I].SingleDate>A[I].SingleDate
            begin
              Count[I]:= Count[I]+1;
              T := A[I];
              A[I] := A[J];
              A[J] := T;
            end;
    end;


PS:  这是二维数组吗? 不要乱说

#13


哪有那么麻烦。我有一个非常简单的方法:
不就是String吗?看你的代码,IDCard应当是一个最大长度一定的String吧。比如说20个字符(足够大了吧。当然最好要确定最大长度,否则我的方法没有用)。
排序的时候设置一个S,然后将IDCard和SignDate相加,然后将相加的数据进行比较(如果IDcard长度不是最大长度,一律补空格)。

#14


up

#15


jufeng_zhu(老猪):似乎不错,呵呵~~想一想有道理~

#16


up

#17


up    up   upupupup
up    up   up      up
up    up   upupupup
up    up   up
up    up   up
upupupup   up