【发布时间】:2014-01-23 00:18:24
【问题描述】:
我正在尝试实现一种算法来找到需要最少内存的第 N 个最大元素。
示例: 整数列表:1;9;5;7;2;5。数量:2 删除重复项后,列表变为 1;9;5;7;2。 所以,答案是 7,因为 7 是修改后列表中的第二大元素。
在下面的算法中,我使用冒泡排序对列表进行排序,然后在不使用临时变量的情况下删除重复项,这是否使我的程序内存高效?任何想法或建议
type Integer_array is Array (Natural range <>) of Integer;
procedure FindN-thLargestNumber (A : in out Integer_Array) is
b : Integer;
c:Integer;
begin
//sorting of array
for I in 0 to length(A) loop
for J in 1 to length(A) loop
if A[I] > A[J] then
A[I] = A[I] + A[J];
A[J] = A[I] - A[J];
A[I] = A[I] - A[J];
end if;
end loop;
end loop;
//remove duplicates
for K in 1 to length(A) loop
IF A[b] != A[K] then
b++;
A[b]=A[K];
end loop;
c = ENTER TO FIND N-th Largest number
PRINT A[b-(c-1)] ;
end FindN-th Largest Number
【问题讨论】:
-
在实践中避免使用 temp 并不能节省任何内存 - 最终都会出现在寄存器中。冒泡排序对于任何目的都是可怕的(O(N**2) 时间)。快速排序需要 O(log N) 额外空间,但速度更快。
-
为什么这个问题被标记为 Java?
标签: algorithm big-o bubble-sort