去除重复值的排序。

program InsertSorter;
var
        m, n, i, j, p, left, right, middle : integer;
        a : array[1 .. 100] of integer;
begin
        readln(n);
        for i := 1 to n do
                read(a[i]);
        p := 1;
        for i := 2 to n do
        begin
                m := a[i];

                left := 1;
                right := p;
                while left <= right do
                begin
                        middle := (left+right) div 2;
                        if m < a[middle] then
                                right := middle-1
                        else if m > a[middle] then
                                left := middle+1
                        else
                                break;
                end;

                if m <> a[middle] then
                begin
                        j := p;
                        while (j > 0) and (a[j] > m) do
                        begin
                                a[j+1] := a[j];
                                j := j-1;
                        end;
                        a[j+1] := m;
                        p := p+1;
                end;
        end;
        for i := 1 to p do
                write(a[i], '  ');
        readln;
        readln;
end.


program StraightSelectSorter;
var
        n, i, j, p, t : integer;
        a : array[1 .. 100] of integer;
begin
        readln(n);
        for i := 1 to n do
                read(a[i]);
        i := 1;
        while i < n do
        begin
                p := i;
                for j := i+1 to n do
                        if a[j] < a[p] then
                                p := j;
                if a[p] <> a[i-1] then
                begin
                     t := a[i];
                     a[i] := a[p];
                     a[p] := t;
                     i := i+1;
                end
                else
                begin
                     t := a[n];
                     a[n] := a[p];
                     a[p] := t;
                     n := n-1;
                end;
        end;
        if a[n] = a[n-1] then
                n := n-1;
        for i := 1 to n do
                write(a[i], '  ');
        readln;
        readln;
end.
posted @ 2010-01-22 21:09  SmartIOI  阅读(159)  评论(0)    收藏  举报
本站采用CC授权如需转载、引用文章,请务必附上作者及来源处。 Creative Commons License