⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsort.pro

📁 basic median filter simulation
💻 PRO
字号:
function Bsort, Array, Asort, INFO=info, REVERSE = rev;+; NAME:;       BSORT; PURPOSE:;       Function to sort data into ascending order, like a simple bubble sort.; EXPLANATION:;       Original subscript order is maintained when values are equal (FIFO).;       (This differs from the IDL SORT routine alone, which may rearrange ;       order for equal values);; CALLING SEQUENCE:  ;       result = bsort( array, [ asort, /INFO, /REVERSE ] );; INPUT:;       Array - array to be sorted;; OUTPUT:;       result - sort subscripts are returned as function value;; OPTIONAL OUTPUT:;       Asort - sorted array;; OPTIONAL KEYWORD INPUTS:;       /REVERSE - if this keyword is set, and non-zero, then data is sorted;                 in descending order instead of ascending order.;       /INFO = optional keyword to cause brief message about # equal values.;; HISTORY;       written by F. Varosi Oct.90:;       uses WHERE to find equal clumps, instead of looping with IF ( EQ ).;       compatible with string arrays, test for degenerate array ;       20-MAY-1991     JKF/ACC via T AKE- return indexes if the array to ;                       be sorted has all equal values.;       Aug - 91  Added  REVERSE keyword   W. Landsman      ;       Always return type LONG    W. Landsman     August 1994;       Converted to IDL V5.0   W. Landsman   September 1997;-        N = N_elements( Array )        if N lt 1 then begin                print,'Input to BSORT must be an array'                return, [0L]           endif        if N lt 2 then begin            asort = array       ;MDM added 24-Sep-91            return,[0L]    ;Only 1 element        end;; sort array (in descending order if REVERSE keyword specified );        subs = sort( Array )        if keyword_set( REV ) then subs = rotate(subs,5)          Asort = Array[subs];; now sort subscripts into ascending order; when more than one Asort has same value;             weq = where( (shift( Asort, -1 ) eq Asort) , Neq )         if keyword_set( info ) then $                message, strtrim( Neq, 2 ) + " equal values Located",/CON,/INF        if (Neq EQ n) then return,lindgen(n) ;Array is degenerate equal values        if (Neq GT 0) then begin                if (Neq GT 1) then begin              ;find clumps of equality                        wclump = where( (shift( weq, -1 ) - weq) GT 1, Nclump )                        Nclump = Nclump + 1                  endif else Nclump = 1                if (Nclump LE 1) then begin                        Clump_Beg = 0                        Clump_End = Neq-1                  endif else begin                        Clump_Beg = [0,wclump+1]                        Clump_End = [wclump,Neq-1]                   endelse                weq_Beg = weq[ Clump_Beg ]              ;subscript ranges                weq_End = weq[ Clump_End ] + 1          ; of Asort equalities.                if keyword_set( info ) then message, strtrim( Nclump, 2 ) + $                                " clumps of equal values Located",/CON,/INF                for ic = 0L, Nclump-1 do begin          ;sort each clump.                        subic = subs[ weq_Beg[ic] : weq_End[ic] ]                        subs[ weq_Beg[ic] ] = subic[ sort( subic ) ]                  endfor                if N_params() GE 2 then Asort = Array[subs]     ;resort array.           endifreturn, subsend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -