【IDL代码库】IDL实现冒泡排序算法
本文使用IDL实现经典的冒泡排序算法,虽然IDL内置了排序函数sort(),但是经典的冒泡排序算法还是值得学习。冒泡排序类似于汉诺塔游戏,关于冒泡排序wiki百科解释如下:
伪代码如下:
函数 冒泡排序 输入 一个数组名称为array 其长度为length
i 从 0 到 (length - 1)
j 从 0 到 (length - 1 - i)
如果 array[j] > array[j + 1]
交换 array[j] 和 array[j + 1] 的值
如果结束
j循环结束
i循环结束
函数结束
IDL实现:
FUNCTION BubbleSort, arr
FOR i = 0, N_ELEMENTS(arr) - 2 DO BEGIN
FOR j = i + 1, N_ELEMENTS(arr) - 1 DO BEGIN
IF arr[i] GT arr[j] THEN BEGIN
temp = arr[i] & arr[i] = arr[j] & arr[j] = temp
ENDIF
ENDFOR
ENDFOR
RETURN, arr
END
调用示例:
IDL> arr = [2, 21, 3, 4, 1, 0, 6]
IDL> bubblesort(arr)
冒泡排序最坏情况的时间复杂度为O(n²),与IDL自带sort()排序函数时间对比如下:
IDL>
IDL> tic
IDL> result1 = bubblesort(arr)
IDL> toc
IDL> tic
IDL> result2 = arr[sort(arr)]
IDL> toc
IDL> print, array_equal(result1, result2)
% Time elapsed: 11.414000 seconds.
% Time elapsed: 0.0020000935 seconds.