【IDL代码库】IDL实现冒泡排序算法

本文使用IDL实现经典的冒泡排序算法,虽然IDL内置了排序函数sort(),但是经典的冒泡排序算法还是值得学习。冒泡排序类似于汉诺塔游戏,关于冒泡排序wiki百科解释如下:

      1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。

      2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

      3.针对所有的元素重复以上的步骤,除了最后一个。

      4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

伪代码如下:

函数 冒泡排序 输入 一个数组名称为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> arr = REVERSE(INDGEN(10000))

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.

  1

posted @ 2022-05-27 18:14  ENVI-IDL技术殿堂  阅读(368)  评论(0编辑  收藏  举报